4

我对 google.maps.geometry.poly.isLocationOnEdge() 方法有疑问。在小提琴中,尝试单击水平线,按预期返回 true,但单击垂直线返回 false。为什么?

谢谢!

这是小提琴,这是代码:

function initialize() {
    var mapOptions = {
    zoom: 8,
    center: new google.maps.LatLng(0.5, 0.5),
    mapTypeId: google.maps.MapTypeId.TERRAIN
  };

  var map = new google.maps.Map(document.getElementById('map-canvas'),
      mapOptions);

  var poly = new google.maps.Polyline({
    path: [
      new google.maps.LatLng(0, 0),
      new google.maps.LatLng(0, 1),
      new google.maps.LatLng(1, 1)
    ],
      map: map
  });

    google.maps.event.addListener(poly, 'click', function(event){
        alert(google.maps.geometry.poly.isLocationOnEdge(event.latLng, this), 0.00001);
    });
}

google.maps.event.addDomListener(window, 'load', initialize);
4

2 回答 2

3

我认为你最好使用containsLocation()

文档

要查找给定点是否在多边形内,请将点和多边形传递给 google.maps.geometry.poly.containsLocation()。如果该点在多边形内或其边缘上,则函数返回 true。

对比

要确定一个点是否落在折线上或附近,或者在多边形的边缘上或附近,请将点、折线/多边形以及可选的以度为单位的公差值传递给 google.maps.geometry.poly.isLocationOnEdge() .

如果你使用containsLocation它的工作原理

alert(google.maps.geometry.poly.containsLocation(event.latLng, poly));

分叉的小提琴http://jsfiddle.net/VL7Rx/

我真的无法准确解释为什么它不能与isLocationOnEdge. 这似乎只是 100% 垂直折线的问题,并且对于您的 0,0,0,1 等,Lng 始终为零(0)(单击垂直) - 好像该线根本没有任何“宽度” ,“地图”。

于 2013-10-02T12:16:58.720 回答
0

如果您的侦听器用于单击折线,则 ​​containsLocation 仅在 davidkonrad 的小提琴中起作用。如果您的听众在地图上,您将在由 3 个 LatLngs 形成的三角形中的任何地方得到“真实”。如果用户无法单击地图本身,那么这很好,但它可能不适用于您的特定要求。

可悲的是,我看不出为什么垂直线也不起作用(但它不仅仅是垂直线,它似乎不适用于任何非水平线)。

于 2014-01-09T22:28:58.570 回答