이것은 프런트 엔드 측에 있습니다. 나는 turf.js을 사용하고 있습니다.Turf.js Polygon, MultiPolygon, GeometryCollection으로 교차 버퍼
시나리오 : 내 현재 위치에서 10km 이내에있는 모든 경고 및 인시던트를 가져옵니다.
많은 사람들이 geometry.type='Point' || geometry.type='MultiPolygon' || geometry.type='GeometryCollection'
을 갖고있는 경고 또는 인시던트가 포함 된 geojson 피드가 생깁니다. 내가 지금까지했던 어떤
:
내 현재의 좌표 버퍼 기능 영역을 만들고 사고가 나 (10km) 근처에서 발생한 경우 비교.
geometry.type = 'Point'인 경우 turf.inside (point, bufferPolygon)를 사용하여 비교하고 있는데 정상적으로 작동합니다.
어려운 점은 MultiPolygon 또는 MultiPolygons가있는 GeometryCollection입니다.
양쪽 매개 변수에서 다각형을 사용할 수있는 유일한 방법은 turf.intersect(polygon, bufferPolygon)
입니다.
여기에 피드에 geometry.type ='Polygon'
이 표시되지 않지만 MultiPolygon
또는 GeometryCollection
(멀티 폴리곤이 있음)입니다.
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);
}
}
또한 멀티 폴리곤을 다각형으로 변환하려고 시도했지만 제대로 작동하지 않았습니다.
점, 다중 다각형 및 GeometryCollection을 가진 기능 모음 집합과 bufferFeature를 비교할 수있는 방법을 제안 해주십시오.