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>