我的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);
答案 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形成的三角形中的任何位置获得“真实”。如果用户无法单击地图本身,那么这很好,但它可能无法满足您的特定要求。
可悲的是,我不明白为什么垂直线也不起作用(但它不仅仅是垂直线,它似乎不适用于任何不水平的线)。