GMaps:android中computeDistanceBetween的疯狂值?

时间:2014-03-25 22:06:52

标签: android google-maps-api-3

我使用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,

1 个答案:

答案 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不那么硬。