2013-10-17 101 views
1

現在我正在研究移動應用程序,它以特定間隔獲取gps位置,將位置數據發送到服務器。服務器根據此信息繪製Google路線圖。繪製谷歌路線圖:修復路線中的錯誤

請幫我解決以下情形

有時GPS座標標示實際行駛的相反的路線上,使路線完全錯誤。

例如我走在route like this (On google map)

enter image description here

但我得到map like (On google map)

enter image description here

的點B被取出/標記的平行道路上

我怎麼解決這個問題?

+0

移動指向正確的道路?如果你有太多的數據需要手動完成,你需要創建一個算法來檢測不正確的點並修復它(這並不容易)。 – geocodezip

+0

@geocodezip你知道任何類似的算法或刪除不正確的點的邏輯。 –

+2

如果我這樣做,我會指出你。 – geocodezip

回答

0

嘗試亞歷山大圖書館的路線卓爾

編譯 'com.github.jd - 亞歷山大:庫:1.1.0'

例如:

private void startRouting() { 
 

 
     
 
     LatLng origin = new LatLng(18.01455, -77.499333); 
 
     LatLng destination = new LatLng(18.0145600, -77.491333); 
 
     Routing routing = new Routing.Builder() 
 
       .travelMode(Routing.TravelMode.DRIVING) 
 
       .alternativeRoutes(false) 
 
       .withListener(new RoutingListener() { 
 
        @Override 
 
        public void onRoutingFailure(RouteException e) { 
 
         Log.e("onRoutingFailure: ", e.getMessage()); 
 
        } 
 

 
        @Override 
 
        public void onRoutingStart() { 
 

 
        } 
 

 
        @Override 
 
        public void onRoutingSuccess(ArrayList<Route> routes, int shortestRouteIndex) { 
 
         if (routes != null && routes.size() > 0) { 
 
          for (Route route : routes) { 
 
           List<LatLng> latlngs = route.getPoints(); 
 
           try { 
 

 
            Random rnd = new Random(); 
 
            int color = Color.argb(200, rnd.nextInt(256), rnd.nextInt(256), 0); 
 
/*         int color1 = Color.argb(225, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); 
 
            int color2 = Color.argb(225, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); 
 
            int color3 = Color.argb(225, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));*/ 
 
            mMap.addPolyline(new PolylineOptions().addAll(latlngs).color(color).width(12.0f)); 
 

 
           } catch (Exception e) { 
 
            e.printStackTrace(); 
 
            Log.e("onRoutingSuccess: ", e.getMessage()); 
 
            Toast.makeText(MainActivity.this, "An internal error occurred!", Toast.LENGTH_SHORT).show(); 
 
           } 
 
          } 
 
          //showBottomSheet(routes.get(shortestRouteIndex)); 
 
         } 
 
        } 
 

 
        @Override 
 
        public void onRoutingCancelled() { 
 
         Log.e("onRoutingCancelled: ", "Routing cancelled"); 
 
        } 
 
       }) 
 
       .waypoints(origin, destination) 
 
       .build(); 
 
     routing.execute(); 
 

 

 
    }