これはフロントエンド側です。私はturf.jsを使用しています。Turf.jsポリゴン、マルチポリゴン、ジオメトリコレクションを持つ交差バッファ
シナリオ:現在の場所から10km以内のすべての警告とインシデントを取得します。
多くの機能を備えた警告またはインシデントを含むgeojsonフィードは、geometry.type='Point' || geometry.type='MultiPolygon' || geometry.type='GeometryCollection'
のライブフィードを取得しています。
は私の現在の座標とバッファ機能エリアを作成し、事件は私の近く(10キロ)が発生した場合の比較:私がこれまで行ってきた何
。
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を比較する方法をお勧めしますか?