-3
一個多邊形在谷歌地圖上繪製的一組多邊形,現在我想實現給定一個位置與某些緯度/經度它所在的多邊形的哪一個。算法找到一個多邊形中的經緯度或長或不包含
注:多邊形也引起給出了使用谷歌地圖API的緯度/多頭
那麼,有沒有它的任何API或我怎麼能轉換成經/緯度位置XY平面,這樣我可以檢查一個給定的點在哪個區域使用面積公式?
一個多邊形在谷歌地圖上繪製的一組多邊形,現在我想實現給定一個位置與某些緯度/經度它所在的多邊形的哪一個。算法找到一個多邊形中的經緯度或長或不包含
注:多邊形也引起給出了使用谷歌地圖API的緯度/多頭
那麼,有沒有它的任何API或我怎麼能轉換成經/緯度位置XY平面,這樣我可以檢查一個給定的點在哪個區域使用面積公式?
使用下面光線投射alogrithm可以幫助ü解決這個問題
google.maps.Polygon.prototype.Contains = function(point) {
// ray casting alogrithm
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);
}
};