两个Lat和Long之间的行程距离

我想计算并给出两套Lat和Long之间的距离,以便在Road上旅行。

我查看了Google的Directions and Distance Matrix API。 并且还在SO上做了很多其他问题。

但我无法find最佳方法,你需要计算每次约20-25个位置的距离。

我们正在构建一个旅行应用程序,需要在Android设备上为用户提供此信息。

    如果您正在寻找距离最短的驾驶距离,那么您可以尝试使用以下URL来调用API服务:

    http://maps.googleapis.com/maps/api/distancematrix/json?origins=54.406505,18.67708&destinations=54.446251,18.570993&mode=driving&language=en-EN&sensor=false 

    这将导致像这样的JSON:

     { "destination_addresses" : [ "Powstańców Warszawy 8, Sopot, Polska" ], "origin_addresses" : [ "majora Henryka Sucharskiego 69, Gdańsk, Polska" ], "rows" : [ { "elements" : [ { "distance" : { "text" : "24,7 km", "value" : 24653 }, "duration" : { "text" : "34 min", "value" : 2062 }, "status" : "OK" } ] } ], "status" : "OK" } 

    结果距离是两个位置之间的实际道路距离。

    您可以在Google Distance Matrix API中find更多详细信息

    它给出了两个位置之间的距离。

    首先,您需要获得纬度,经度和目的地相同的经度。 通过这种方法传递这些。

    它返回它们之间的距离。

     public float distanceFrom(float lat1, float lng1, float lat2, float lng2) { double earthRadius = 3958.75; double dLat = Math.toRadians(lat2-lat1); double dLng = Math.toRadians(lng2-lng1); double a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.sin(dLng/2) * Math.sin(dLng/2); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); double dist = earthRadius * c; int meterConversion = 1609; return new Float(dist * meterConversion).floatValue(); } 

    在您提出要求之前,您可能希望再搜索一下。

    无论如何,使用Haversine公式

     rad = function(x) {return x*Math.PI/180;} distHaversine = function(p1, p2) { var R = 6371; // earth's mean radius in km var dLat = rad(p2.lat() - p1.lat()); var dLong = rad(p2.lng() - p1.lng()); var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(rad(p1.lat())) * Math.cos(rad(p2.lat())) * Math.sin(dLong/2) * Math.sin(dLong/2); var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); var dist = R * c; return dist.toFixed(3); }