2016-09-28 回答
relax blog
relax.cnblogs.com
如何判断一个指定的经纬度点是否落在一个多边形区域内?
百度map里面的js代码
//点在多边形内
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);
}
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.max(s.lat, q.lat)) {
s = q;
continue
}
if (e.lat > math.min(s.lat, q.lat) && e.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) return n
}
if (e.lng }
}
}
} 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
}
};
supermap.is.utility.js 里面找到的代码