python判断坐标在市没_js/小程序判断地图坐标点是否在多边形区域内

度娘了一圈,只发现了一个python代码有用。其他要么太复杂,要么都是调GD地图util啊,BD地图util啊,或者Java util的封装好的方法,但人家又不开源啊!我把这段python翻译成了js代码,简单测试发现OK。这代码看起来也太简单了,简单到我都不相信,,,but, it works!!!

设:需要判断的目标点为P

参数

aLat: P的纬度

aLon: P的经度

pointList: 单个多边形区域顶点数组。如果有多个独立区域,则分别调用本方法,只要有一次为ture即表示在区域内。

请注意pointList的格式,我用的是对象;如果你用的是数组或字符串,请自行修改获取纬度(pLat1,pLat2)、经度(pLon1,pLon2)的代码。

utilofMap.js文件:

function IsPtInPoly(aLat, aLon, pointList) {

/*

:param aLon: double 经度

:param aLat: double 纬度

:param pointList: list [{latitude: 22.22, longitude: 113.113}...] 多边形点的顺序需根据顺时针或逆时针,不能乱

*/

var iSum = 0

var iCount = pointList.length

if(iCount < 3) {

return false

}

for(var i = 0; i < iCount;i++) {

var pLat1 = pointList[i].latitude

var pLon1 = pointList[i].longitude

if(i == iCount - 1) {

var pLat2 = pointList[0].latitude

var pLon2 = pointList[0].longitude

} else {

var pLat2 = pointList[i + 1].latitude

var pLon2 = pointList[i + 1].longitude

}

if (((aLat >= pLat1) && (aLat < pLat2)) || ((aLat>=pLat2) && (aLat < pLat1))) {

if (Math.abs(pLat1 - pLat2) > 0) {

var pLon = pLon1 - ((pLon1 - pLon2) * (pLat1 - aLat)) / (pLat1 - pLat2);

if(pLon < aLon) {

iSum += 1

}

}

}

}

if(iSum % 2 != 0) {

return true

}else {

return false

}

}

module.exports = {

IsPtInPoly: IsPtInPoly,

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值