Mehr

OpenLayers 3 - Auf ein ausgewähltes Feature zoomen

OpenLayers 3 - Auf ein ausgewähltes Feature zoomen


Ich arbeite mit OpenLayers 3. Ich habe über ein Dropdown-Menü ein Feature ausgewählt und möchte auf den Umfang des ausgewählten Features zoomen. Im Moment ist es möglich, über das Dropdown-Menü auszuwählen, aber nicht zu zoomen. Gibt es eine Möglichkeit, dies zu beheben?

function selectByDivision(){ var divisionUser = document.getElementById('division-select').options[document.getElementById('division-select').selectedIndex].text; var selectedFeatures = select.getFeatures(); selectedFeatures.clear(); var features = lyr_divisions3857.getSource().getFeatures(); if(Features){ for(i=0;i

Lassen Sie uns zunächst das Konzept klarstellen:

Ich nehme an, IhrauswählenVariable enthält eine Referenz auf eine Instanz vonol.interaction.Select. Wenn du es nennstgetFeaturesMethode erhalten Sie eineol.KollektionObjekt, das Ihre ausgewählten Features intern enthält. Es ist absolut gültig, Methoden darauf aufzurufen, wieklar, oderdrücken.

Sammlungsobjekte haben jedoch kein agetFeaturesMethode. Um das interne Array zu erhalten, das die Sammlung enthält, müssen Sie its . aufrufengetArrayMethode stattdessen:

var polygon = selectedFeatures.getArray();

Was ein einfaches Array zurückgibt. Nun nehme ich an, Ihre Funktion stellt sicher, dass diese Sammlung zum Zeitpunkt des Zugriffs nur ein Mitglied enthalten kann. Ein Array ist jedoch auch ein Array mit nur einem Member, daher müssen Sie mit einem Indexwert darauf zugreifen:

varausdehnung = polygon[0].getGeometry();

Nachdem Sie nun eine Referenz auf ein Geometrieobjekt korrekt erfasst haben, ist es immer noch eine Instanz vonol.geom.Geometrie, kein Extent (ein Array mit vier Koordinaten). Als Methodefiteine Ausdehnung braucht, kannst du sie aus der Geometrie mit ihrem calculate berechnengetExtentMethode. Daher müssen Sie Ihre Zeile wie folgt ändern:

varausdehnung = polygon[0].getGeometry().getExtent();

AKTUALISIEREN:

Du kannst anrufenfitmit einem Geometrieobjekt, daher ist eine Berechnung der Geometrieausdehnung nicht erforderlich.


Verwenden von fit stellt die Ansicht der Karte so ein, dass sie der verwendeten Geometrie entspricht.

map.getView().fit(feature.getGeometry(), map.getSize())

Schau das Video: QGIS Tutorial 112: OpenLayers Plugin, Navigation, Web layers