这是在前端。我正在使用turf.js。
场景:获取当前位置 10 公里范围内的所有警告和事件。
我正在获取包含警告或事件的实时 geojson 提要,其中包含许多具有geometry.type='Point' || geometry.type='MultiPolygon' || geometry.type='GeometryCollection'
.
到目前为止我做了什么:
使用我当前的坐标创建一个缓冲区特征区域,并比较我附近是否发生了事件(10 公里)。
如果 geometry.type='Point' 我正在使用 turf.inside(point, bufferPolygon) 进行比较,这工作正常。
挑战在于当它不是一个点时,比如 MultiPolygon 或 GeometryCollection,其中包含 MultiPolygons。
我可以用来查找在两个参数中都接受多边形的唯一其他方法是turf.intersect(polygon, bufferPolygon)
.
在这里,我没有进入geometry.type ='Polygon'
我的提要,但它是一个MultiPolygon
或GeometryCollection
(具有 MultiPolygons)。
if(feature.geometry.type === 'Point') {
if(turf.inside(feature, bufferPolygon)) {
console.log("inside");
feature.properties.feedType === 'warning' ? warningsNearBy++ : incidentsNearBy++;
}
} else {
if(feature.geometry.type === 'GeometryCollection') {
$.each(feature.geometry.geometries, function(index, geo) {
if(geo.type === 'MultiPolygon') {
//console.log('MP:', geo.coordinates[0]);
var convertToPolygon = turf.polygon(geo.coordinates[0]);
console.log('convertToPolygon:',convertToPolygon);
//console.log('MP:intersect',turf.intersect(polygon, bufferPolygon));
var isIntersecting = turf.intersect(convertToPolygon, bufferPolygon);
if(isIntersecting) {
feature.properties.feedType === 'warning' ? warningsNearBy++ : incidentsNearBy++;
}
} else if(geo.type === 'GeometryCollection') {
console.log('GC:', geo);
}
});
} else {
console.log('not geo collection:', feature.geometry.type);
}
}
此外,尝试将 multiPolygon 转换为 Polygon,效果不佳。
任何人都可以建议一种将bufferFeature与一组具有点、多面体和GeometryCollection的特征集合进行比较的方法吗?