Il s'agit du frontend. J'utilise turf.js.Turf.js Tampon à intersections avec Polygon, MultiPolygon, GeometryCollection
Scénario: Obtenez tous les avertissements et les incidents dans un rayon de 10km de ma position actuelle.
Je reçois en direct le flux geojson qui contient des avertissements ou des incidents avec beaucoup de fonctionnalités dont certaines ont leur geometry.type='Point' || geometry.type='MultiPolygon' || geometry.type='GeometryCollection'
.
Ce que je l'ai fait jusqu'à présent:
Créer une zone tampon de fonction avec mes coordonnées actuelles et comparer si un incident est survenu près de moi (10 km).
Si geometry.type = 'Point' je compare en utilisant turf.inside (point, bufferPolygon), et cela fonctionne très bien. Le défi est quand ce n'est pas un point, disons un MultiPolygon ou un GeometryCollection qui contient des MultiPolygons.
La seule autre méthode que je peux utiliser pour trouver qui accepte les polygones dans les deux paramètres est turf.intersect(polygon, bufferPolygon)
.
Ici, je ne suis pas geometry.type ='Polygon'
dans mon alimentation, mais il est un MultiPolygon
ou GeometryCollection
(ayant Multipolygones).
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);
}
}
De même, essayé de convertir un multiPolygon en polygone, cela ne fonctionnait pas très bien. Peut-on suggérer un moyen de comparer un bufferFeature avec un ensemble de collection de caractéristiques ayant un point, multipolygon et GeometryCollection?