답변:
Google Maps API는 아직 다각형의 점을 확인하는 방법을 제공하지 않습니다. 비트를 조사한 후 XY 좌표가 플롯 된 모양 안에 있는지 여부를 결정하는 Ray-casting 알고리즘을 우연히 발견했습니다. 이것은 위도와 경도로 변환됩니다. 다음은이 알고리즘을 사용하도록 google.maps.polygon.prototype을 확장합니다. google.maps가로드 된 후 코드의 특정 지점에이 코드를 포함 시키면됩니다.
google.maps.Polygon.prototype.Contains = function (point) {
var crossings = 0,
path = this.getPath();
// for each edge
for (var i = 0; i < path.getLength(); i++) {
var a = path.getAt(i),
j = i + 1;
if (j >= path.getLength()) {
j = 0;
}
var b = path.getAt(j);
if (rayCrossesSegment(point, a, b)) {
crossings++;
}
}
// odd number of crossings?
return (crossings % 2 == 1);
function rayCrossesSegment(point, a, b) {
var px = point.lng(),
py = point.lat(),
ax = a.lng(),
ay = a.lat(),
bx = b.lng(),
by = b.lat();
if (ay > by) {
ax = b.lng();
ay = b.lat();
bx = a.lng();
by = a.lat();
}
// alter longitude to cater for 180 degree crossings
if (px < 0) {
px += 360;
}
if (ax < 0) {
ax += 360;
}
if (bx < 0) {
bx += 360;
}
if (py == ay || py == by) py += 0.00000001;
if ((py > by || py < ay) || (px > Math.max(ax, bx))) return false;
if (px < Math.min(ax, bx)) return true;
var red = (ax != bx) ? ((by - ay) / (bx - ax)) : Infinity;
var blue = (ax != px) ? ((py - ay) / (px - ax)) : Infinity;
return (blue >= red);
}
};
여기서는 함수 매개 변수에 제공된 위도 경도가 다각형 내에 있는지 여부를 판별하는 데 사용할 수있는 이름이 'Contains'인 함수를 정의하여 google.maps.Polygon의 기능을 확장했습니다. 여기서 우리는 Ray-casting 알고리즘을 사용하고이를 사용하여 함수를 개발했습니다. 지금이 운동을 많이 한 후에는 다음과 같이 요점을 확인할 수 있습니다.
var point = new google.maps.LatLng(52.05249047600099, -0.6097412109375);
var polygon = new google.maps.Polygon({path:[INSERT_PATH_ARRAY_HERE]});
if (polygon.Contains(point)) {
// point is inside polygon
}
전체 코드와 데모를 보려면 http://counsellingbyabhi.blogspot.in/2013/01/google-map-check-whether-point-latlong.html 로 이동 하십시오.
써드 파티 프로그램을 거장 고로 사용하는 경우 다각형 세트 내에서 포인트를 확인할 수 있습니다. 더 많은 정보는 여기에 있습니다 .
contains
Availability: PostGIS, Oracle, MySQL, SpatiaLite
Tests if the geometry field spatially contains the lookup geometry.
Example:
Zipcode.objects.filter(poly__contains=geom)
Backend SQL Equivalent
PostGIS ST_Contains(poly, geom)
Oracle SDO_CONTAINS(poly, geom)
MySQL MBRContains(poly, geom)
SpatiaLite Contains(poly, geom)
나는 그것이 당신에게 도움이되기를 바랍니다 ...
나는 이것이 조금 늦다는 것을 알고 있지만 SomeOne이 Android-Map-Utils 라이브러리를 시도하지 않은 경우 도움이 될 수 있습니다. 이 질문의 특정 방법은 Android에만 게시했습니다. 여기 있습니다 :