4.2 Funktionsweise
An dieser Stelle wird das konzipierte animated zooming
Skalierungsmodell im Detail vorgestellt.
Dazu wird zunächst der gesamte Zoomprozess bei Nutzung des Zoomsliders
erläutert und anschließend die Besonderheiten des
ZoomOut-Vorgangs beschrieben.
Es seien Zn die momentan aktuelle Zoomstufe der
Hauptkarte, Zmax die maximale Zoom(In)stufe
und Zmin = 0 die minimale Zoom(Out)stufe für
die gelten:
Z ∈ N und
Zmin ≤ Zn ≤ Zmax
Die folgenden Schritte beschreiben das entwickelte Skalierungsmodell
und das genaue Vorgehen, solange der Benutzer den Zoomslider bedient.
Ein Zustandsdiagramm (Abb. 4.2) und ein
Aktivitätsdiagramm (Abb. 4.2)
veranschaulichen dieses Modell. Dabei beziehen sich die Zahlen in den
Aktionszuständen des Aktivitätsdiagramms auf diese einzelnen Schritte:
- Der Nutzer drückt mit der linken Maustaste auf den Zoomslider
und hält diese Taste bis auf weiteres gedrückt. Sobald der
Nutzer die Taste wieder loslässt, wird der Prozess an dieser
Stelle gestoppt und mit Schritt 8 abgeschlossen.
- Die aktuelle Zoomstufe Zn wird
bestimmt.
- Alle Kacheln k innerhalb der Zoomstufe Zn, die ganz oder teilweise im
sichtbaren Bereich liegen, und alle bereits vorgeladenen Kacheln,
die an diesen Bereich angrenzen, werden bestimmt.
- Der Nutzer entscheidet sich für eine Zoomrichtung (ZoomIn
oder ZoomOut).
- Nun wird geprüft, ob die Entscheidung von (4) mit der
aktuellen
Zoomstufe Zi (beim 1. Durchgang ist Zi = Zn) vereinbar ist; d. h. wenn
Zi = Zmin bzw.
Zi = Zmax gilt, ist kein
ZoomOut bzw. ZoomIn möglich. In diesem Fall muss der Nutzer sich
erneut für eine Zoomrichtung entscheiden (Schritt 4). Im anderen
Fall geht es mit (6) weiter.
- Parallel zur Bewegung des Zoomsliders in die unter (4)
ausgewählte Richtung wird nun der entsprechende Zoom-Skaliervorgang
durchgeführt:
- a) Die neue Zoomsliderposition Pi
wird bestimmt.
- b) Daraus wird die neue Zoomstufe
Zi = Z(Pi) berechnet.
- c) Die neue (skalierte) Kachelgröße K(Zi) der
aktuellen Zoomstufe Zi wird auf Basis von
Zn berechnet. Als Regeln gelten:
K(Zi) = 2Zi - Zn * K(Zn) für
Zn < Zi
K(Zi) = K(Zn) für Zn = Zi
K(Zi) = 1 / (2(Zn - Zi) * K(Zn)) für
Zn > Zi
Ausgehend von der Zoomstufe Zn wird mit
jeder neuen Zoomstufe Zi die gegebene
Kachelgröße K(Zn) verdoppelt (für Zn<Zi; vgl.
Gleichung 4.1) bzw. halbiert
(für Zn>Zi; vgl. Gleichung 4.3), um die neue Kachelgröße K(Zi) der aktuellen Zoomstufe Zi zu
erhalten. Bei Zoomstufengleichheit (Zn=Zi) sind
die Kachelgrößen gleich groß (vgl. Gleichung 4.2).
Anmerkung: Die einzelnen Zoomstufen dienen lediglich als definierte
Zwischenwerte. Der Skaliervorgang selbst verläuft komplett
stufenlos.
- d) Alle momentan geladenen (sichtbaren und nicht
sichtbaren) Kacheln werden beim ZoomIn- bzw.
ZoomOut-Vorgang auf die errechnete Kachelgröße K(Zi)
skaliert (genauer: vergrößert bzw. verkleinert).
- e) Nur für ZoomOut:
Sobald alle unter (3) bestimmten Kacheln k soweit
verkleinert werden, dass sie alle in den sichtbaren Bereich treten,
müssen weitere Kacheln im Hintergrund nachgeladen werden,
um einen weißen Rahmen beim ZoomOut zu vermeiden. Eine
detaillierte Erläuterung, wie mit diesem Tilepreloading
beim ZoomOut-Vorgang umgegangen wird, gibt der
nachfolgende Abschnitt »Besonderheiten beim
ZoomOut«.
- Solange die linke Maustaste gedrückt wird (siehe Schritt 1), kann
der Nutzer sich jederzeit für eine andere Zoomrichtung
entscheiden und springt damit wieder zu (4).
Lässt der Nutzer die Maustaste los, wird der Zoomvorgang mit
(8) beendet.
- Der sichtbare Bereich wird in der aktuellen Zoomstufe
Zi mit allen dafür benötigten Kacheln in der Standardkachelgröße
K(Zn) neu gezeichnet. Zusätzlich werden (nach Prinzip des
Tiling-Verfahrens; vgl. Abschnitt 2.3.5) alle angrenzenden,
nicht sichtbaren Kacheln in der gleichen Größe vorgeladen. Der Zoomprozess ist damit beendet.
Zustandsdiagramm des Zoomprozesses bei Nutzung
des Sliders
Aktivitätsdiagramm des Zoomprozesses bei Nutzung
des Sliders
Nachfolgend werden zwei Lösungen vorgestellt, wie im
Schritt 6e des ZoomOut-Prozesses mit dem
Vorladen der Kacheln umgegangen werden kann. Wichtigstes Ziel dabei
ist,
dem Benutzer ein möglichst schnelles, verzögerungsfreies Nachladen der Kacheln zu gewährleisten
und damit einen weißen Rahmen um die kleiner werdende Karte zu
vermeiden. Die zwei unterschiedlichen Lösungsansätze versuchen, dieses Ziel
umzusetzen:
- A) Sobald eine der vorher nicht sichtbaren Kacheln von k in den
sichtbaren Bereich eintritt, werden alle nun nicht sichtbaren
Kacheln neu bestimmt. Dabei werden die noch unbekannten Kacheln
im Hintergrund in der Zoomstufe Zn vorgeladen. Sie werden als
neue, nicht sichtbare Kacheln in dem DOM-Baum vorgehalten. Darüber
hinaus passen sich alle nachgeladenen Kacheln sofort dem
momentanen Skalierungsstand an, d. h. sie werden ebenfalls synchron
zu den restlichen Kacheln
auf die berechnete Kachelgröße K(Zi) skaliert.
Nachteil dieser Lösung ist, dass mit stetigem Herauszoomen immer
mehr Kacheln nachgeladen und zusammen mit den bisherigen
Kacheln skaliert werden müssen. Es ist sehr wahrscheinlich, dass die
Performance bei zunehmender Kachelanzahl dadurch stark beeinträchtigt
wird.
- B) Die Besonderheit der zweiten Lösungsvariante ist eine neu
definierte »ZoomOut-Kachel«. Zusätzlich zu den unter Schritt 3
bestimmten Kacheln k wird einmalig beim Initialisieren der
Anwendung eine weitere Kachel k*
vorgeladen, um den ZoomOut-Prozess durchzuführen.
k* bildet die geografische Ausdehnung
der Gesamtkarte auf einer Kachel ab. Die vordefinierte
Kachelpixelgröße K* von k* sei um den Faktor x größer als
die vordefinierte Kachelgröße Kk aller Kacheln k:
K* = x * Kk, wobei
x ≥ 1
und
x ∈ R
ist. Ein geeigneter Wert für x ist abhängig von der
Gesamtkartengröße sowie der
Anzahl der möglichen Zoomstufen und wird in der Realisierung
(vgl. Abschnitt 5.2.3) ermittelt.
Das Zentrum der Gesamtkarte sei die geometrische Mitte von k*.
Ziel dieses Lösungsansatzes ist es, das aufwändige
Nachladen der Kacheln aus Lösung (A) beim On-the-fly-Herauszoomen zu
reduzieren. Statt dessen wird k* als eine Art Basiskachel
genommen, mit der sich der Großteil der Skalierungsvorgänge
durchführen lässt. Dadurch müssen nicht, wie in Lösung A,
zahlreiche zum »Abdecken« des weißen Rands benötigte Kacheln
nachgeladen und skaliert werden. Zumal die hohe Detailstufe dieser
Kacheln für eine ZoomOut-Skalierung (Verkleinern) gar nicht
benötigt wird.
Nachteilig wird sich die starke »Verpixelung« von k* bei
hinreichend weiter Vergrößerung auswirken. Abhängig vom
Zoomstufenintervall kann dies dazu führen, dass
Kartenausschnitte im hohen Skalierungsprozess nicht mehr identifiziert
werden können.
© 1. Juni 2007,
Emanuel Schütze,
some rights reserved.
Diese Arbeit ist unter der Creative Commons Lizenz
Namensnennung-Weitergabe unter gleichen Bedingungen 2.0 Deutschland lizensiert.