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

时间:2011-06-29 14:37:40

标签: google-maps google-maps-api-3 polygon

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

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

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

这是我的声明:

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

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

7 个答案:

答案 0 :(得分:38)

解决此问题的一种算法是光线投射。请参阅解释here

您可以找到为Google Maps JS API V3 here实现此功能的代码。

HTH。

答案 1 :(得分:20)

您可以使用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);

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

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

答案 2 :(得分:8)

您在Google Maps API文档中拥有非常好的example containsLocation()方法。

答案 3 :(得分:5)

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

答案 4 :(得分:3)

示例和实现没有考虑多边形可以跨越180度边界。

实现确实在边界框检查中考虑(隐式),但多边形检查失败。

答案 5 :(得分:2)

我已经使用了同样的东西并且工作正常并且它的离线代码我已经用PHP编写了这段代码,你可以用任何编程语言编写它。

none

&GT?;

答案 6 :(得分:1)

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脚本中包含该库。 Read more...

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