我使用google.maps.geometry.spherical.computeDistanceBetween()
计算相对较近的点(10-30米)之间的距离。这在Linux(Chrome和Firefox)中完美运行,但有时会给我疯狂的Android结果。我得到的一个案例是:
var p1 = new google.maps.LatLng(-22.960584,-43.206687999999986);
var p2 = new google.maps.LatLng(-22.960584,-43.206939000000034);
alert(google.maps.geometry.spherical.computeDistanceBetween(p1,p2));
它应该给25米左右,但是一旦我达到了数十万米。同样,我并不总是得到疯狂的价值观,只是"有时",可能与大量的计算有关?
这是一个众所周知的错误吗?如果是的话,我不能使用这种方法而且必须自己制作。
谢谢,
L,
答案 0 :(得分:0)
据我所知,这是一个Android错误。我认为这可以很好地解释为什么在 MyTracks 应用程序中,我通常会在其他大陆和远距离上随机点。 我用下面的方法计算了距离函数,现在我总是得到正确的值。特别是,如果它看起来像这样,对于使用此功能的Android应用程序来说,这是一个非常严重的错误。
如果有人关心,这是LatLng
p和q:
function dist(p,q) {
var c = Math.PI/180;
// Google (gives randomly wrong results in Android!)
//return google.maps.geometry.spherical.computeDistanceBetween(p,q);
// Chord
//return 9019995.5222 * Math.sqrt((1-Math.cos(c*(p.lat()-q.lat())))
// + (1-Math.cos(c*(p.lng()-q.lng()))) * Math.cos(c*p.lat()) * Math.cos(c*q.lat()));
// Taylor for chord
return 111318.845 * Math.sqrt(Math.pow(p.lat()-q.lat(),2)
+ Math.pow(p.lng()-q.lng(),2) * Math.cos(c*p.lat()) * Math.cos(c*q.lat()));
}
请注意,这些是和弦的计算,即R ^ 3中的距离,而不是球体中的测地距离。当然,使用GPS进行远足/汽车旅行计算已经足够了。我最终使用泰勒扩展,因为它精确到1/10毫米,而且CPU不那么硬。