如何在没有使用谷歌地图方向API的Android应用程序中的2个地理点之间find距离(通过公路)?

我正在开发一个Android应用程序。 我需要find两个地理坐标之间的距离。

我使用Location.distanceBetween()Location.distanceTo()函数。 这些function给出了直线距离,但是我们在路上行驶时的实际距离是不同的。

Solutions Collecting From Web of "如何在没有使用谷歌地图方向API的Android应用程序中的2个地理点之间find距离(通过公路)?"

使用谷歌API作为

 public float 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(); 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 f*1000; } 

或者你可以使用下面的function

 public final static double AVERAGE_RADIUS_OF_EARTH = 6371; public float calculateDistance(double userLat, double userLng, double venueLat, double venueLng) { double latDistance = Math.toRadians(userLat - venueLat); double lngDistance = Math.toRadians(userLng - venueLng); double a = (Math.sin(latDistance / 2) * Math.sin(latDistance / 2)) + (Math.cos(Math.toRadians(userLat))) * (Math.cos(Math.toRadians(venueLat))) * (Math.sin(lngDistance / 2)) * (Math.sin(lngDistance / 2)); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); return (float) (Math.round(AVERAGE_RADIUS_OF_EARTH * c)); } 

您可以使用Bing地图路线服务来计算驾驶距离。 由于您正在创build移动应用,所以Bing地图的免费使用条款是Google提供的两倍。 看看这里的服务

你也可以在这里find一个如何在Android应用程序中使用这个服务的例子