如何判断一个指定的经纬度点是否落在一个多边形区域内

如题所述

第1个回答  推荐于2016-12-01
Relax Blog
relax.cnblogs.com
如何判断一个指定的经纬度点是否落在一个多边形区域内?
百度MAP里面的JS代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

//点在多边形内
function ptInPolygon(){
var pts = [];
var pt1 = new BMap.Point(116.395, 39.910);
var pt2 = new BMap.Point(116.394, 39.914);
var pt3 = new BMap.Point(116.403, 39.920);
var pt4 = new BMap.Point(116.402, 39.914);
var pt5 = new BMap.Point(116.410, 39.913);

pts.push(pt1);
pts.push(pt2);
pts.push(pt3);
pts.push(pt4);
pts.push(pt5);
var ply = new BMap.Polygon(pts);

var pt =new BMap.Point(116.400, 39.914);

var result = BMapLib.GeoUtils.isPointInPolygon(pt, ply);
if(result == true){
alert("点在多边形内");
} else {
alert("点在多边形外")
}

//演示:将面添加到地图上
map.clearOverlays();
var mkr = new BMap.Marker(pt);
map.addOverlay(mkr);
map.addOverlay(ply);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61

b.isPointInPolygon = function(o, l) {
if (! (o instanceof BMap.Point) || !(l instanceof BMap.Polygon)) {
return false
}
var k = l.getBounds();
if (!this.isPointInRect(o, k)) {
return false
}
var t = l.getPath();
var h = t.length;
var n = true;
var j = 0;
var g = 2e-10;
var s, q;
var e = o;
s = t[0];
for (var f = 1; f <= h; ++f) {
if (e.equals(s)) {
return n
}
q = t[f % h];
if (e.lat < Math.min(s.lat, q.lat) || e.lat > Math.max(s.lat, q.lat)) {
s = q;
continue
}
if (e.lat > Math.min(s.lat, q.lat) && e.lat < Math.max(s.lat, q.lat)) {
if (e.lng <= Math.max(s.lng, q.lng)) {
if (s.lat == q.lat && e.lng >= Math.min(s.lng, q.lng)) {
return n
}
if (s.lng == q.lng) {
if (s.lng == e.lng) {
return n
} else {++j
}
} else {
var r = (e.lat - s.lat) * (q.lng - s.lng) / (q.lat - s.lat) + s.lng;
if (Math.abs(e.lng - r) < g) {
return n
}
if (e.lng < r) {++j
}
}
}
} else {
if (e.lat == q.lat && e.lng <= q.lng) {
var m = t[(f + 1) % h];
if (e.lat >= Math.min(s.lat, m.lat) && e.lat <= Math.max(s.lat, m.lat)) {++j
} else {
j += 2
}
}
}
s = q
}
if (j % 2 == 0) {
return false
} else {
return true
}
};本回答被提问者和网友采纳
相似回答