是否可以向谷歌发送两个lat长点来计算两者之间的距离?
答案 0 :(得分:10)
如果您要使用v3 google maps API,请使用以下功能:
注意:您必须将&libraries=geometry
添加到脚本源
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&libraries=geometry"></script>
现在功能:
//calculates distance between two points in km's
function calcDistance(p1, p2){
return (google.maps.geometry.spherical.computeDistanceBetween(p1, p2) / 1000).toFixed(2);
}
答案 1 :(得分:7)
您所追求的是 Haversine formula 。您不需要Google地图来执行此操作,您可以单独进行操作。有一个脚本(在JavaScript中)here。
答案 2 :(得分:3)
是的谷歌可以做到这一点
这是一段java脚本,它以km为单位得到两点
function initialize() { if (GBrowserIsCompatible()) { map = new GMap2(document.getElementById("map_canvas")); map.setCenter(new GLatLng(52.6345701, -1.1294433), 13); map.addControl(new GLargeMapControl()); map.addControl(new GMapTypeControl()); geocoder = new GClientGeocoder(); // NR14 7PZ var loc1 = new GLatLng(52.5773139, 1.3712427); // NR32 1TB var loc2 = new GLatLng(52.4788314, 1.7577444); alert(loc2.distanceFrom(loc1) / 1000); } }
答案 3 :(得分:3)
c#中的距离cal:
// this returns the distance in miles. for km multiply result: * 1.609344
public static double CalculateDistance(double lat1, double lon1, double lat2, double lon2)
{
double t = lon1 - lon2;
double distance = Math.Sin(Degree2Radius(lat1)) * Math.Sin(Degree2Radius(lat2)) + Math.Cos(Degree2Radius(lat1)) * Math.Cos(Degree2Radius(lat2)) * Math.Cos(Degree2Radius(t));
distance = Math.Acos(distance);
distance = Radius2Degree(distance);
distance = distance * 60 * 1.1515;
return distance;
}
private static double Degree2Radius(double deg)
{
return (deg * Math.PI / 180.0);
}
private static double Radius2Degree(double rad)
{
return rad / Math.PI * 180.0;
}
答案 4 :(得分:2)
不,但是你可以使用Vincenty的公式来模拟地球的形状。它可以在Javascript here中找到。
一个非常容易解析的网页是(例如):http://boulter.com/gps/distance/?from=51.5329855+-0.1303506&to=40.757584+-73.985642&units=m
对于只想快速测量距离的人,请查看this gadget。但是,它只使用大圆计算。
正如Rob所说,谷歌已经添加了它,但他们仍然只使用大圈公式,这可能是1/300不准确。
答案 5 :(得分:0)
我这么做了很多年,但你可以使用Great Circle Distance
答案 6 :(得分:0)
如果您只想将距离作为数字,请尝试这样的事情。
function InitDistances() {
var startLocation = new GLatLng(startLat, startLon);
var endLocation = new GLatLng(endLat, endLon);
var dist = startLocation .distanceFrom(endLocation);
// Convert distance to miles with two decimal points precision
return (dist / 1609.344).toFixed(2);
}
答案 7 :(得分:0)
有一个方便的功能
http://code.google.com/apis/maps/documentation/reference.html#GLatLng.distanceFrom
基本上创建2个GlatLng对象然后使用上面的方法