2016-03-08 94 views
1

我有一個Android應用程序,它每15秒捕獲一次經緯度,我們用這一串經緯度來找出起點和目的地之間的道路距離(第一個和最後一個經緯度長度按時間戳排序)。計算經度和緯度數組的道路距離

實際上,這個應用程序是爲在城市中運行微型卡車的客戶提供的,他們的卡車司機將使用此應用程序來標記旅程的開始/結束,數據包丟失等。我們將根據客戶基準計算公里運行在旅途中。

在我們的場景中,車輛將在殖民地/小區域內交付數據包,並且有充滿轉彎,環島和一次又一次的相同路徑。

所以我試圖找到一個最好的方法來計算所有收集的經緯度的距離。

我選擇兩種方法:

  1. 使用「半正矢」的公式來計算兩個緯度多頭之間地球的距離,加上連續的距離。在這裏,我的距離減少了10%。
  2. 另一個是谷歌地圖api,但它是成功的直道上和我的情況下失敗。

請提出一些方法,它至少給出96-97%的準確度,這在業內已被廣泛接受。由於驅動程序必須使用Android應用程序,因此我們不希望在車輛中部署VTS設備,這會使成本增加一倍。

回答

1

distanceTo()方法會返回您鳥兒飛過的距離,而不是通過公路。您可以使用此方法兩點之間獲得的距離(公路):

public String getDistance(final double lat1, final double lon1, final double lat2, final double lon2){ 
String parsedDistance; 
String response; 
    Thread thread=new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try { 

       URL url = new URL("http://maps.googleapis.com/maps/api/directions/json?origin=" + lat1 + "," + lon1 + "&destination=" + lat2 + "," + lon2 + "&sensor=false&units=metric&mode=driving"); 
       final HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
       conn.setRequestMethod("POST"); 
       InputStream in = new BufferedInputStream(conn.getInputStream()); 
       response = org.apache.commons.io.IOUtils.toString(in, "UTF-8"); 

       JSONObject jsonObject = new JSONObject(response); 
       JSONArray array = jsonObject.getJSONArray("routes"); 
       JSONObject routes = array.getJSONObject(0); 
       JSONArray legs = routes.getJSONArray("legs"); 
       JSONObject steps = legs.getJSONObject(0); 
       JSONObject distance = steps.getJSONObject("distance"); 
       parsedDistance=distance.getString("text"); 

      } catch (ProtocolException e) { 
       e.printStackTrace(); 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
thread.start(); 
try { 
    thread.join(); 
} catch (InterruptedException e) { 
    e.printStackTrace(); 
} 
return parsedDistance; 
} 
+0

我的問題是,我怎麼能得到我自己的一套經緯度的或特定的路徑精確的距離,曲折與滿滿的轉身?我已經試過這個解決方案作爲一個選項,我的問題也提到了。 –

+0

只要Google有它的映射,(它在道路等),它應該爲你工作。據我所知,如果谷歌還沒有制定路線圖,我認爲無法通過公路獲得路程。 – Fustigador

相關問題