Javascript OpenLayers vor dem Zoom-Ereignis-Listener

8

Ich versuche, OpenLayers so einzurichten, dass die Vektorebene nicht unmittelbar vor dem Start eines Zooms angezeigt wird und nach dem Ende eines Zooms wieder angezeigt wird. Ich habe den Zoom-End-Teil bereits so eingerichtet:

%Vor%

Aber ich sehe keine Art von Ereignis-Listener für den Start eines Zooms in der Dokumentation. Es gibt einen "Movestart", der das Bewegen, Schwenken und Zoomen umfasst. Leider kann ich den "movestart" nicht verwenden, weil ich nicht möchte, dass die Schicht während einer Pfanne verschwindet. Sie würden denken, dass es einen "Zoomstart" geben würde, da es einen "Zoomend" gibt.

Der Grund dafür ist, dass es mir nicht gefällt, wie die Vektorebene bei Verwendung von Google Maps als Basislayer mit einer anderen Rate zoomt. Es sieht falsch aus, sieht so aus, als ob alle Funktionen ungenau sind, obwohl sie nach dem Abschluss des Zooms an der richtigen Stelle landen.

Irgendwelche Vorschläge?

    
renosis 24.06.2012, 21:58
quelle

5 Antworten

2

Zu diesem Zweck sollten Sie die Methoden moveTo und moveByPx von OpenLayers.Map außer Kraft setzen, um das Auslösen von Movestart-Ereignissen für alle Aktionen außer dem Zoomen zu beseitigen.

    
drnextgis 25.06.2012, 02:41
quelle
8

Hier ist es einfach, das Ereignis 'BeforeZoom' zu den OpenLayers hinzuzufügen. Fügen Sie einfach den folgenden Code zu dem Ort hinzu, an dem Sie Ihr Kartenobjekt erstellt haben.

%Vor%

Wie das funktioniert:

Für jede Art von Zoom-Aktivität ruft OpenLayers API schließlich die Funktion namens zoomTo auf. Bevor wir es überschreiben, kopieren wir diese Funktion in eine neue Funktion namens 'ZoomToProxy'. Wir überschreiben es und fügen unsere bedingte Zoom-Logik hinzu. Wenn wir wollen, dass der Zoom auftritt, rufen wir einfach eine neue Proxy-Funktion auf:)

    
Shaunak 26.06.2013 16:17
quelle
2

Ich hatte das gleiche Problem, das OP hatte, und ich versuchte, es mit drnextgis Lösung zu lösen. Aber leider hat es nicht ganz funktioniert: Die zoomChanged -Eigenschaft in OpenLayers.Map.moveTo wird nicht nur bei einer Änderung der Zoomstufe, sondern auch bei der Größenänderung der Karte zu true ausgewertet.

Meine Karte war 100% des Browserfensters des Benutzers. Wenn sie also die Größe des Fensters änderte, wurde das Ereignis ausgelöst. Dies war für mich unerwünscht, da ich das Ereignis nur auslösen wollte, wenn sich die Zoomstufe tatsächlich geändert hatte. Meine Lösung bestand darin, ein neues Ereignis namens "zoomstart" zu erstellen, das ich oben in OpenLayers.Map.moveTo eingefügt habe. Hier ist der Code:

%Vor%

Dieser Code übergibt die neue Zoomstufe an einen Ereignis-Listener, der für zoomstart registriert ist, und in meinem Fall ermittle ich den restrictedExtent der Karte und mache andere Sachen basierend auf der neuen Zoomstufe.

Friede sei mit euch.

    
Wavy Davy 25.02.2013 23:45
quelle
1

"movestart" handhabt "zoomstart". Um zu erkennen, ob der Zoom-Start funktioniert, versuchen Sie:

%Vor%     
Ofembe 19.02.2014 04:14
quelle
0

Lösung von "Shaunak" ist sehr gut für mich gearbeitet. Ich möchte das Zoomen unter 11 beschränken, also habe ich seinen Code als

bearbeitet %Vor%     
Ömer Faruk Terzioğlu 18.09.2013 07:02
quelle