Situation: Ich habe eine Arbeitsstelle, wo MapboxGL beim Eingeben einer Adresse einen Punkt auf der Karte markiert und eine Polygonebene abfragt (queryRenderedFeatures) und die Polygonfunktion anzeigt, die den Punkt enthält.MapboxGL: Abfrage von gerenderten Objekten nach mehreren Geocodes
Dies funktioniert; Wenn ich dann jedoch eine zweite Adresse geokodieren möchte, die die Kartenansicht ändert, schlägt sie ein zweites Mal fehl, weil map.queryRenderedFeatures ein leeres Array zurückgibt.
var userDistrictsGeoJson;
map.on('load', function() {
//add layers from Mapbox account
addLayers(); //details left out of example, but this works.
// Listen for geocoding result
// This works the first time through, but fails if the user searchs for a second address because queryRenderedFeatures is working with a smaller set of features
geocoder.on('result', function(e) {
//need to clear geojson layer and
userDistrictsGeoJson = {
"type": "FeatureCollection",
"features": []
};
map.getSource('single-point').setData(e.result.geometry);
//project to use (pixel xy coordinates instead of lat/lon for WebGL)
var point = map.project([e.result.center[0], e.result.center[1]]);
var features = map.queryRenderedFeatures(point, { layers: ['congress-old'] });
var filter = featuresOld.reduce(function(memo, feature){
// console.log(feature.properties);
memo.push(feature.properties.GEOID);
return memo;
}, ['in', 'GEOID']);
map.setFilter('user-congress-old', filter);
var userCongressOldGeoJson = map.querySourceFeatures('congressional-districts', {
sourceLayer: 'congress_old',
filter: map.getFilter('user-congress-old')
});
userDistrictsGeoJson.features.push(userCongressOldGeoJson[0]);
var bbox = turf.bbox(userDistrictsGeoJson);
var bounds = [[bbox[0], bbox[1]], [bbox[2], bbox[3]]];
map.fitBounds(bounds, {
padding: 40
});
}); //geocoder result
}); //map load
So wie ich schon sagte, alles, was ‚Ergebnis‘ auf dem Geocodes läuft Ereignis arbeitet das erste Mal durch, aber es scheint, dass auf das zweite Mal durch (Benutzer sucht neue Adresse, aber nicht neu geladen Karte) queryRenderedFeatures gibt eine kleinere Teilmenge von Features zurück, die die Kacheln, auf denen der Geocoder landet, nicht enthält.
Alle Vorschläge werden sehr geschätzt.