Google Maps v3:检查点是否存在于多边形中

我正在寻找一种方法来检查一个点是否存在于Google Maps v3(JavaScript)的多边形中。 我到处search,到目前为止我find的唯一解决scheme是获取多边形的界限,但是显示的代码似乎只是创build了一个矩形,并不断扩大其表面积以包含所有相关的点。

顺便说一下,我不能只用一个大的方块,即得到一个多边形边界,是因为我在地图上有多边形边界,他们不能扩大到对方的领土。

编辑以下从下面的答复,我已经尝试使用我的现有多边形之一实施示例代码,但它只是说,它没有定义,我不明白为什么。

这里是我的报关表:

myCoordinates = [ new google.maps.LatLng(0.457301,-0.597382), new google.maps.LatLng(0.475153,-0.569916), new google.maps.LatLng(0.494379,-0.563049), new google.maps.LatLng(0.506738,-0.553436), new google.maps.LatLng(0.520470,-0.541077), new google.maps.LatLng(0.531456,-0.536957), new google.maps.LatLng(0.556174,-0.552063), new google.maps.LatLng(0.536949,-0.596008), new google.maps.LatLng(0.503991,-0.612488), new google.maps.LatLng(0.473780,-0.612488) ]; polyOptions = { path: myCoordinates, strokeColor: "#FF0000", strokeOpacity: 0.8, strokeWeight: 2, fillColor: "#0000FF", fillOpacity: 0.6 }; var rightShoulderFront = new google.maps.Polygon(polyOptions); rightShoulderFront.setMap(map); 

这里是我检查的地方:

 var coordinate = selectedmarker.getPosition(); var isWithinPolygon = rightShoulderFront.containsLatLng(coordinate); console.log(isWithinPolygon); 

但它不断出现错误:未捕获的ReferenceError:rightShoulderFront没有定义

一种解决这个问题的algorithm是射线投射。 在这里看到一个解释。

你可以在这里find为Google Maps JS API V3实现的代码。

HTH。

您可以使用Google地图几何库完成此操作。

首先一定要添加谷歌地图几何库。

 <script type="text/javascript" src="//maps.googleapis.com/maps/api/js?libraries=geometry&sensor=false"></script> 

然后,定义你的多边形

 var rightShoulderFront = new google.maps.Polygon({ paths: myCoordinates }); rightShoulderFront .setMap(map); 

我将添加一个事件侦听器来处理“点击”事件,但是您可以适应您的需求

 google.maps.event.addListener(rightShoulderFront , 'click', isWithinPoly); 

创build一个函数来处理我们的点击事件,如果坐标存在于使用Google几何库的多边形中,请检查它

 /** @this {google.maps.Polygon} */ function isWithinPoly(event){ var isWithinPolygon = google.maps.geometry.poly.containsLocation(event.latLng, this); console.log(isWithinPolygon); } 

在Google Maps API文档中,您有一个很好的示例 : containsLocation()方法。

你应该看看Gmaps.js库。 它有一个相当简单的地理围栏的方法。

该示例和实现不考虑多边形可以穿越180度边界。

实现在边界框检查中将其考虑在内(隐含地),但多边形检查失败。

 var coordinate = new google.maps.LatLng(0.457301,-0.597382);//replace with your lat and lng values var isWithinPolygon = google.maps.geometry.poly.containsLocation(coordinate, yourPolygon); 

不要忘记在你的googleapis脚本中包含库。 阅读更多…

 <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=geometry"></script>