谷歌地图API V3 - isLocationOnEdge()不起作用

时间:2013-10-01 10:06:04

标签: javascript google-maps-api-3

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

谢谢!

这是fiddle,这是代码:

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);

2 个答案:

答案 0 :(得分:2)

我认为您最好使用containsLocation()

来自docs

  

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

VS

  

确定某个点是在折线上还是在折线附近,或者在或上   靠近多边形的边缘,传递点,折线/多边形和   可选的公差值,以度为单位   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)(点击垂直) - 好像这条线没有有任何“宽度”,“mapwise”。

答案 1 :(得分:0)

containsLocation仅适用于davidkonrad的小提琴,如果您的聆听者是折线上的点击。如果您的聆听者在地图上,那么您将在由3个LatLng形成的三角形中的任何位置获得“真实”。如果用户无法单击地图本身,那么这很好,但它可能无法满足您的特定要求。

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