我在google地图上设置了一个典型的多边形集,其中包含一些latLng:
var bermudaTriangle = new google.maps.Polygon({
paths: [
new google.maps.LatLng(25.774252, -80.190262),
new google.maps.LatLng(18.466465, -66.118292),
new google.maps.LatLng(32.321384, -64.75737),
]
});
bermudaTriangle.setMap(map);
这些是来自谷歌文档的百慕大三角坐标。我也有一些随机的坐标,saaay:
var coord1 = new new google.maps.LatLng(26.194876675795218,-69.8291015625)
var coord2 = new new google.maps.LatLng(33.194876675795218,-63.8291015625)
第一个恰好在三角形内部,第二个在外面。这些只是一些例子,我需要的是一种方法来找出,如果提供的坐标(不只是这两个中的一个,任何协调)在多边形内部或外部(也不是总是百慕大三角形,甚至不是三角形 - 多边形可以有任意数量的latLng)。我查看了Google Maps API文档,但找不到任何提供的功能 这个问题的答案。
答案 0 :(得分:8)
使用containsLocation(point:LatLng, polygon:Polygon)方法。
containsLocation(point:LatLng,polygon:Polygon)boolean计算给定点是否位于指定的多边形内。
代码段
function checkInPolygon(marker, polygon) {
var infowindow = new google.maps.InfoWindow();
var html = "";
if (google.maps.geometry.poly.containsLocation(marker.getPosition(), polygon)) {
html = "inside polygon";
} else {
html = "outside polygon";
}
infowindow.setContent(html);
infowindow.open(map, marker);
}
var map;
var coord1 = new google.maps.LatLng(26.194876675795218, -69.8291015625);
var coord2 = new google.maps.LatLng(33.194876675795218, -63.8291015625);
function initialize() {
var map = new google.maps.Map(
document.getElementById("map_canvas"), {
center: new google.maps.LatLng(37.4419, -122.1419),
zoom: 13,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
bermudaTriangle.setMap(map);
var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < bermudaTriangle.getPath().getLength(); i++) {
bounds.extend(bermudaTriangle.getPath().getAt(i));
}
bounds.extend(coord1);
bounds.extend(coord2);
var marker1 = new google.maps.Marker({
map: map,
position: coord1
});
var marker2 = new google.maps.Marker({
map: map,
position: coord2,
});
map.setCenter(bounds.getCenter());
map.setZoom(3);
checkInPolygon(marker1, bermudaTriangle);
checkInPolygon(marker2, bermudaTriangle);
}
google.maps.event.addDomListener(window, "load", initialize);
var bermudaTriangle = new google.maps.Polygon({
paths: [
new google.maps.LatLng(25.774252, -80.190262),
new google.maps.LatLng(18.466465, -66.118292),
new google.maps.LatLng(32.321384, -64.75737),
]
});
html,
body,
#map_canvas {
height: 100%;
width: 100%;
margin: 0px;
padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry"></script>
<div id="map_canvas"></div>
答案 1 :(得分:1)
如果Google Maps API没有专门用于此的任何方法,那么您需要找到或编写自己的方法。这是计算机图形学中的常见问题,如果你进行Google“多边形命中测试”,你会发现大量的信息。 This SO answer看起来相当全面。
答案 2 :(得分:1)
在V3 API中有google.maps.geometry.poly.containsLocation静态方法。
请参阅https://developers.google.com/maps/documentation/javascript/reference#poly
所以你只需要传递多边形和要检查的点是否在多边形内部。
答案 3 :(得分:0)
查看维基百科Point in polygon page。有几种方法可以确定点是否在多边形内。其中之一是光线投射算法。 This page有一些关于如何在Google地图中实现该功能的示例。