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

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

Relax Blog
relaxcnblogscom
如何判断一个指定的经纬度点是否落在一个多边形区域内?
百度MAP里面的JS代码
//点在多边形内
function ptInPolygon(){
var pts = [];
var pt1 = new BMapPoint(116395, 39910);
var pt2 = new BMapPoint(116394, 39914);
var pt3 = new BMapPoint(116403, 39920);
var pt4 = new BMapPoint(116402, 39914);
var pt5 = new BMapPoint(116410, 39913);

ptspush(pt1);
ptspush(pt2);
ptspush(pt3);
ptspush(pt4);
ptspush(pt5);
var ply = new BMapPolygon(pts);

var pt =new BMapPoint(116400, 39914);

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

//演示:将面添加到地图上
mapclearOverlays();
var mkr = new BMapMarker(pt);
mapaddOverlay(mkr);
mapaddOverlay(ply);
}
bisPointInPolygon = function(o, l) {
if (! (o instanceof BMapPoint) || !(l instanceof BMapPolygon)) {
return false
}
var k = lgetBounds();
if (!thisisPointInRect(o, k)) {
return false
}
var t = lgetPath();
var h = tlength;
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 (eequals(s)) {
return n
}
q = t[f % h];
if (elat < Mathmin(slat, qlat) || elat > Mathmax(slat, qlat)) {
s = q;
continue
}
if (elat > Mathmin(slat, qlat) && elat < Mathmax(slat, qlat)) {
if (elng <= Mathmax(slng, qlng)) {
if (slat == qlat && elng >= Mathmin(slng, qlng)) {
return n
}
if (slng == qlng) {
if (slng == elng) {
return n
} else {++j
}
} else {
var r = (elat - slat) (qlng - slng) / (qlat - slat) + slng;
if (Mathabs(elng - r) < g) {
return n
}
if (elng < r) {++j
}
}
}
} else {
if (elat == qlat && elng <= qlng) {
var m = t[(f + 1) % h];
if (elat >= Mathmin(slat, mlat) && elat <= Mathmax(slat, mlat)) {++j
} else {
j += 2
}
}
}
s = q
}
if (j % 2 == 0) {
return false
} else {
return true
}
};

SuperMapISUtilityjs 里面找到的代码


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13396808.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-28
下一篇 2023-07-28

发表评论

登录后才能评论

评论列表(0条)

保存