在谷歌地图android中找到两个坐标之间的道路距离

我正在使用以下代码来查找android中两组坐标之间的道路距离:

public String getDistance(double lat1, double lon1, double lat2, double lon2) { String result_in_kms = ""; String url = "http://maps.google.com/maps/api/directions/xml?origin=" + lat1 + "," + lon1 + "&destination=" + lat2 + "," + lon2 + "&sensor=false&units=metric"; String tag[] = {"text"}; HttpResponse response = null; try { HttpClient httpClient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); HttpPost httpPost = new HttpPost(url); response = httpClient.execute(httpPost, localContext); InputStream is = response.getEntity().getContent(); DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); org.w3c.dom.Document doc = builder.parse(is); if (doc != null) { NodeList nl; ArrayList args = new ArrayList(); for (String s : tag) { nl = doc.getElementsByTagName(s); if (nl.getLength() > 0) { Node node = nl.item(nl.getLength() - 1); args.add(node.getTextContent()); } else { args.add(" - "); } } result_in_kms =String.valueOf( args.get(0)); } } catch (Exception e) { e.printStackTrace(); } //Float f=Float.valueOf(result_in_kms); return result_in_kms; } 

但是我得到的不是它们之间的距离是’ – ‘。上面的代码有什么问题,我从这篇文章中得到了它:

如何在不使用谷歌地图方向api的情况下在Android应用程序中找到2个地理点之间的距离(通过公路)?

你将使用波纹管方法得到两个lat long的差异。

 public float getDistance(double lat1, double lon1, double lat2, double lon2) { android.location.Location homeLocation = new android.location.Location(""); homeLocation .setLatitude(lat1); homeLocation .setLongitude(lon1); android.location.Location targetLocation = new android.location.Location(""); targetLocation .setLatitude(lat2); targetLocation .setLongitude(lon2); float distanceInMeters = targetLocation.distanceTo(homeLocation); return distanceInMeters ; } 

如果你想要以km为单位的距离,请将其转换为km。

请尝试编写如下代码的代码:

 public String getDistance(final double lat1, final double lon1, final double lat2, final double lon2){ 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 = iStreamToString(in); 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"); Log.v("Distsnce","Distance>>"+parsedDistance); } 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; } public String iStreamToString(InputStream is1) { BufferedReader rd = new BufferedReader(new InputStreamReader(is1), 4096); String line; StringBuilder sb = new StringBuilder(); try { while ((line = rd.readLine()) != null) { sb.append(line); } rd.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } String contentOfMyInputStream = sb.toString(); return contentOfMyInputStream; } 

//使用您的出发地和目的地纬度和经度调用上述方法。

例如:

  getDistance(23.0225,72.5714,21.1702,72.8311);