实现方法:
/**
* 判断经纬度点是否在地区区域内
* @param pointArr 经纬度坐标,[lng,lat]
* @param feature 地区的geojson的feature对象
*/
function judgePointIsInFeature(pointArr: Array<number>, feature: any) {
let isInside = false;
// 经纬度点
const point = turf.point(pointArr);
// 判断点是否在 MultiPolygon 区域内
if (feature.geometry.type === "MultiPolygon") {
for (const polygon of feature.geometry.coordinates) {
const polygonObj = turf.polygon([polygon]);
// 遍历每个 Polygon
if (turf.booleanPointInPolygon(point, polygonObj)) {
isInside = true;
break; // 找到一个包含点的 Polygon,就停止循环
}
}
// 输出结果
// console.log('点是否在 MultiPolygon 区域内:', isInside);
// 判断点是否在Polygon区域内
} else if (feature.geometry.type === "Polygon") {
isInside = turf.booleanPointInPolygon(point, feature);
//输出结果
// console.log('点是否在区域内:', isInside); // true
} else {
ElMessage.warning('地区边界数据获取异常!')
}
return isInside;
}
数据格式示例:
const multiPolygonData = {
features:[
{
geometry:{
type: 'MultiPolygon',
coordinates:[[],[],[]]
},
type:'Feature',
}
]
}
const polygonData = {
features:[
{
geometry:{
type: 'Polygon',
coordinates:[[]]
},
type:'Feature',
}
]
}
注:
1、上述方法传参中的feature为features[0];
2、turf插件库的介绍TURF JS 介绍_turf.js-CSDN博客