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

Bob*_*-ob 29 google-maps polygon google-maps-api-3

我希望找到一种方法来检查Google Maps v3(JavaScript)中多边形内是否存在一个点.我到处搜索,到目前为止我找到的唯一解决方案是获取多边形的边界,但显示的代码似乎只是创建一个矩形并不断扩展其表面区域以包括所有相关点.

顺便说一句,我不能只使用一个大正方形即获得多边形边界的原因是我在地图上有边界多边形并且它们不能扩展到彼此的区域.

编辑继续下面的回复,我尝试使用我现有的多边形之一来实现示例代码,但它只是说它没有定义,我无法弄清楚原因.

这里是我的报关表:

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);
Run Code Online (Sandbox Code Playgroud)

这是我要检查的地方:

var coordinate = selectedmarker.getPosition();
var isWithinPolygon = rightShoulderFront.containsLatLng(coordinate);
console.log(isWithinPolygon);
Run Code Online (Sandbox Code Playgroud)

但它不断出现错误:Uncaught ReferenceError:rightShoulderFront未定义

mhy*_*itz 40

解决此问题的一种算法是光线投射.请在此处查看说明.

您可以在此处找到为Google Maps JS API V3实现此功能的代码.

HTH.


小智 21

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

首先一定要添加谷歌地图几何图书馆.

<script type="text/javascript" src="//maps.googleapis.com/maps/api/js?libraries=geometry&sensor=false"></script>
Run Code Online (Sandbox Code Playgroud)

然后,定义您的多边形

var rightShoulderFront = new google.maps.Polygon({
            paths: myCoordinates
        });
rightShoulderFront .setMap(map);
Run Code Online (Sandbox Code Playgroud)

我将添加一个事件监听器来处理"点击"事件,但您可以根据自己的需要进行调整

google.maps.event.addListener(rightShoulderFront , 'click', isWithinPoly);
Run Code Online (Sandbox Code Playgroud)

创建一个函数来处理我们的click事件,使用Google的几何库检查多边形中是否存在坐标

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

  • 谷歌是否对此方法的使用有限制,'containsLocation()'? (3认同)

Dam*_*ica 8

你有一个很好的例子containsLocation()谷歌地图API文档中的方法.


小智 5

您应该看看Gmaps.js库.它有一个非常简单的地理围栏方法.