Sicherstellen, dass alle Kacheln in Open Layers 3 XYZ source geladen sind

8

Wir haben einige Ebenen, die eine ol.source.XYZ Quelle benutzen. Für die Ladestrategie verwenden wir ol.loadingstrategy.tile(new ol.tilegrid.createXYZ({})) . Wir müssen sicherstellen, dass alle Kacheln vollständig in der Kartenansicht geladen wurden, bevor Sie mit anderen Vorgängen fortfahren.

Wir haben mehrere Artikel dazu gefunden und haben noch keine 100% ige Lösung gefunden, die uns die Lösung geben wird, die wir brauchen. Die Logik kehrt wahr zurück, auch wenn dies nicht der Fall ist. Wir haben versucht, die Ereignisse "tiroloadstart", "telleloendend" und "tiloloaderror" zu verwenden, wie im Beispiel gezeigt Seite, aber das scheint nicht immer das erwartete Ergebnis zu liefern.

Der GIS-Stack-Exchange-Artikel hier schien vielversprechend, weil Wir könnten den unten aufgeführten Code in Verbindung mit Ereignissen vom Typ "tleloadstart" / "telleloend" verwenden, aber es gibt eine Reihe von Funktionsaufrufen, die nur in ol-debug.js und nicht in ol.js Quellcode. Aus diesem Grund funktioniert der unten eingefügte Code nicht mit ol.js . Dieser Code ist nur eine Kopie aus dem referenzierten Artikel GIS Stack Exchange.

%Vor%

Ich habe zwei Fragen, kann jemand bitte irgendwelche zusätzlichen Gedanken in was wir vielleicht vermissen? Danke für Ihre Hilfe.

  1. Warum sind die Funktionsaufrufe in ol-debug.js und nicht in ol.js verfügbar, wenn sie vom Prototyp von tilegrid Objekt?
  2. Haben Sie noch weitere Vorschläge, wie Sie alle Kacheln vollständig in der Karte laden können?
Scott 11.10.2015, 03:25
quelle

2 Antworten

8

Ereignisse werden geladen

Sie haben richtigerweise angenommen, dass jedem tileloadstart Ereignis auf der Quelle ein tileloadend oder tileloaderror für die entsprechende Kachel folgen sollte. Dies kann wie im verknüpften offiziellen Beispiel verwendet werden, um die Anzahl der Ladekacheln zu verfolgen.

Wenn die Summe der ausgegebenen Ereignisse tileloadend und tileloaderror der Anzahl der Ereignisse tileloadstart entspricht, wird kein Ladevorgang ausgeführt. Wenn dies nicht der Fall ist, sollten Sie versuchen, ein reproduzierbares Beispiel zu erstellen, da dies wahrscheinlich ein Fehler in der Bibliothek wäre.

Es ist jedoch wichtig zu verstehen, was diese Ereignisse bedeuten. Das tileloadend -Ereignis bedeutet nicht, dass die Kachel auf der Karte sichtbar ist, das bedeutet, dass die Kachel vollständig geladen wurde und für das Rendern verwendbar ist. Das tatsächliche Rendern der Kachel erfolgt nach dem Aufruf des Event-Handlers. Daher muss jede Logik zum Laden von Kacheln, die Informationen darüber benötigt, wann alle Kacheln geladen und gerendert werden (z. B. beim Erstellen von Screenshots / Erstellen von Ausdrucken), bis zum nächsten postrender Ereignis.

Sie erwähnen 5-10 Sekunden zwischen einem tileloadend und der Kachel, die tatsächlich auf der Karte erscheint, was zu lang ist, als dass sie mit dem Rendering zusammenhängt (es sei denn, Sie machen wirklich freakige Rendering-Callbacks).

ol-debug.js gegen ol.js

Wie viele JS-Bibliotheken ist OpenLayers-Code im Build-Prozess optimiert und minimiert, um kleinere und effizientere Builds zu erstellen. Alle Typen oder Funktionen, die nicht Teil der API sind, werden minimiert oder entfernt. Nur die Methoden, die in ol.js verfügbar sind und auf openlayers.org dokumentiert sind, sollten als Minimierungen verwendet werden Methoden können jeden Build ändern.

ol-debug.js ist eine nicht optimierte Version der Bibliothek, die beim Debuggen oder Durchsuchen verwendet werden soll.

    
Alvin Lindstam 11.10.2015, 19:52
quelle
2

Das ist mein Ansatz. Es verwendet eine undokumentierte API, aber es funktioniert in Nicht-Debug Openlayers 4.2.0.

%Vor%     
Dan 12.07.2017 09:56
quelle

Tags und Links