You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.5 KiB
55 lines
1.5 KiB
const isPointInPolygon = (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][1] |
|
var pLon1 = pointList[i][0] |
|
if (i == iCount - 1) { |
|
var pLat2 = pointList[0][1] |
|
var pLon2 = pointList[0][0] |
|
} else { |
|
var pLat2 = pointList[i + 1][1] |
|
var pLon2 = pointList[i + 1][0] |
|
} |
|
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 |
|
} |
|
} |
|
|
|
const setWKT = (target, data, id) => { |
|
let { |
|
polygons |
|
} = target.data; |
|
if (data.data && data.data.length > 0) { |
|
let newPolygons = data.data.map(item => { |
|
return item.polygon |
|
}) |
|
target.setData({ |
|
polygons: polygons.concat(newPolygons) |
|
}) |
|
} |
|
} |
|
module.exports = { |
|
isPointInPolygon, |
|
setWKT |
|
}; |