Zum Hauptinhalt springen

Tile Updater

Bitte beachten

Ab Version 24.1. steht ein neuer TileUpdater zur Verfügung. Dei Anleitung dazu fidnen Sie hier. https://help.mapedit.de/admin-guide/mapedit-appbuilder/map-definitions/TileUpdater

Viele Kunden möchten die MapEdit Karte täglich auf dem aktuellen Stand haben. Für eine schnelle Performance werden vorgerenderte Kacheln und auch Live-gerenderte Kacheln verwendet. Beide Kacheln werden fest in die Verzeichnisse auf dem Server gespeichert und müssen daher aktualisiert werden.

Systemvoraussetzung

Der TileUpdater kann nur mit Oracle Datenbanken und in Verbindung mit Kartenserver MapGuide verwendet werden.
Postgres, SQLite, SQLServer oder andere Datenbanken werden zur Zeit nicht unterstützt.

Was macht der Tile Updater: Der TileUpdater untersucht ob Änderungen in der Oracle Datenbank geschehen sind und erzeugt diejenigen Kacheln neu, die von der Änderung betroffen sind. Dadurch wird vermieden, dass bei einer Datenänderung alle Kacheln neu erzeugt werden müssen. Ist die TileServer Konfiguration nur auf Liverendern definiert, dann löscht der TileUpdater nur "alte" Kacheln und erstellt keine neuen – das Erstellen von neuen Kacheln wird nur bei Zoomstufen automatisch angestoßen.

Beispiele:

Neue Features wurden digitalisiert, gelöscht, ein Attribut wurde geändert, dass Auswirkung auf die Darstellung des Features hat o.a. Der TileUpdater arbeitet hierbei ohne die Nutzung von Oracle Trigger. Bei jedem Durchlauf wird jeweils der letzte Datenzustand jedes einzelnen MapGuide Layers (zum Zeitpunkt des letzten Startens des Tile Updaters) mit dem aktuellen Datenzustand des MapGuide Layers verglichen. Hierbei werden nur diejenigen Daten betrachtet die auch für die Darstellung relevant sind. Es werden auch nur die Kacheln upgedatet, die in den in MapGuide für den Layer eingestellten Maßstabsbereich fallen.

Bitte beachten

Wenn die MapGuide Definition der Karte/Layer verändert wird, z.B. mit dem MapGuide Studio oder Maestro oder Tabellen oder Views verändert werden, dann funktioniert der TileUpdater nicht mehr korrekt. Man muss die jeweilige MapGuide Karte neu initialisiert (refresh), die Kacheln müssen neu manuelle gerendert werden und die dazugehörige Invalidate_*.xml muss über run neu erzeugt werden!!! Wir empfehlen daher, den TileUpdater erst dann einzurichten, wenn die Darstellung der MapGuide Karte fest steht und nicht mehr geändert wird!

Konfiguration

Start des Tile Updaters über die rechte Maustaste als Administrator (ansonsten kann es zu Zugriffrechte Problemen kommen): C:\Programme\mum\Tile Updater\Mum.Geo.TileUpdate.exe

Tile Updater

ParameterBeschreibung
Data PathDen Pfad zum MapEdit Installationsverzeichnis C:\inetpub\wwwroot\MumGeoData über den Schalter … auswählen.
TileUpdater PathDieses Verzeichnis muss manuell angelegt werden. Vollzugriff: Jeder
Den Pfad zu dem neuen Verzeichnis C:\inetpub\wwwroot\MumGeoData\Tile Updater\ über den Schalter … dann auswählen.
Für die Logdateien des TileUpdaters muss noch zusätzlich der Pfad C:\inetpub\wwwroot\MumGeoData\Tile Updater\Invalidate manuell angelegt werden.
TileUpdater Alias URLBei der URL den Alias für diesen Pfad angeben, also http://servername/MumGeoData/TileUpdater/ eingeben.
TileServer URLDie URL des TileServers angeben: http://servername:8080/TileServer – siehe Kapitel TileServer.
AddDen Add Button drücken und die MapDefinitions auswählen, die man in den Update Mechanismus einbeziehen will. Es werden die MapDefinitions angezeigt, die in der TileServer.properties eingerichtet sind – siehe Kapitel "Konfiguration des TileServers".
Die Auswahl der MapDefinitions muss nur einmalig gemacht werden. Dieser Vorgang dauert eventuell etwas länger, da hier diverse Analysen der MapGuide Definition und der Datenbankverbindungen laufen. Etwas geduldig warten, auch wenn man meint es passiert nix!
Für jede gewählte MapGuide Karte legt der TileUpdater eine SH_ALKIS.map Datei an in dem Verzeichnis C:\inetpub\wwwroot\MumGeoData\Tile Updater. Diese beinhaltet die Definition der MapGuide Karte mit allen Layern.
RefreshWerden nachträglich Änderungen an der MapGuide Karte gemacht, muss über Refresh die dazugehörige *.map neu erstellt werden!
Im Verzeichnis C:\inetpub\wwwroot\MumGeoData\TileUpdater, das man oben angelegt hat, befindet sich die Datei "TileserverMapName".map. Diese kann man mit Notepad öffnen. Darin stehen die MapGuide Kartenlayer und welche Datenbankverbindung der Layer hat, welche Datenbankfelder in MapGuide genutzt werden und die Zoomlevel in der dieser Layer sichtbar ist.
"TileserverMapName".map
Das lesen dieser Definition passiert nur beim klicken des ADD- oder REFRESH- Schalters, aber nicht wenn man RUN klickt. Bedeutet also, wenn die MapGuide Karte über das Studio oder Maestro verändert wird, dann muss die "TileserverMapName".map neu erstellt werden und zwar über Refresh (wenn die Karte schon über Add hinzugefügt wurde).
RemoveNimmt die ausgewählte MapGuide Karte aus dem Update der Kacheln raus.
RunDas Programm wird manuell mittels der Oberfläche gestartet, in dem man alle MapDefintions die man updaten will, anhakt und auf Run klickt und den Haken Update Tiles setzt.
Programm
Hinweis:
Der Laufbalken zeigt nur die Dauer bzw. den Status an, zum Herausfinden der Änderungen. Das neue Kacheln der geänderten Kacheln wird zum Schluss automatisch gestartet und erfolgt mittels des TileServers, wenn der Haken bei Update Tiles gesetzt ist.

RUN führt das eigentliche Programm aus, das wiederum ermittelt, welche Kacheln aktualisiert werden müssen. Über RUN werden in das Verzeichnis C: \inetpub\wwwroot\MumGeoData\Tile Updater\Invalidate die {TileServerMapName}.xml-Dateien geschrieben, in denen genau aufgelistet wird, welcher Layer an welcher Position eine Änderung hat.

Erläuterung des Programms für Fortgeschrittene

Für jeden MapGuide Layer der Karte wird der SQL-Select ausgeführt, den auch MapGuide ausführt, um die Karte zu erzeugen. Das bedeutet, wenn nur die Geometrie verwendet wird, macht es ein select geom from table. Wenn bei der Layerdefinition ein Feld verwendet wird z.Bsp. die Orientierung, so wird select geom, orientation from table etc. ausgeführt. In der TileserverMapName}.map kann man nachschauen, welche Felder das sind.

Die aktuelle Geometrie aller Features dieser Tabelle wird nun in der Datei {Layername}.geom in einem Unterordner, der so heißt wie die TileServer-Map, abgelegt.

In der Datei {Layername}.hash wird ein Hashwert für jeden Datensatz abgelegt. Ein Hashwert ist eine Zahl, die eindeutig für jede Zeichenkette ist. Das heißt der Text "Hallo" hat fixitiv gesagt den Wert 13 und der Text "Halli" den Wert 29. Dadurch kann man zwei Werte miteinander vergleichen, ohne dass man den eigentlichen Text speichern muss. In unserem Fall wird der alte Zustand der Daten in Form des Hashwertes gespeichert (der weniger Speicherplatz braucht als die ganzen Daten an Platz brauchen würden). Wenn nun Daten geändert werden und danach nochmal die Datensätze ausgewertet werden, dann ändert sich bei den geänderten Datensätzen der Hashcode. Die Software erkennt also genau welche Datensätze sich geändert haben und auch fehlende und neue Datensätze werden erkannt, in dem die Differenz der beiden Zustände ermittelt wird.

Beispiel:

In unserem Layer werden die Geometry, die Orientierung und das Feld Schachtart genutzt. Dann wir der select select geom, orientation, schachtart from table ausgeführt. Das Ergebnis ist dann z.b. "geom = punkt(20.223,45.2367)|orientation=102|schachtart=17". Aus diesem String wird der Hashcode (ein Zahlenwert) ermittelt und in der Datei abgespeichert. Die Daten selbst werden nicht gespeichert.

Anwendung bei Änderungen der MapGuide Karte

Bevor über den TileUpdate eine Karte hinzugefügt oder aktualisiert wird (über Refresh), muss man sicherstellen, das entweder keine Kacheln oder nur aktuell richtige Kacheln vorhanden sind. Man hakt die gewünschte Karte an und über Refresh wird im ersten Schritt ein neues Abbild der geänderten MapGuide Karte erstellt (Kartennamen.map) und klickt im zweiten Schritt auf RUN, aber ohne den Haken bei Update Tiles (noch gibt es keine Änderungen der Daten im Hintergrund – daher muss aktuell keine neuen Kacheln erzeugt werden) – siehe Abbildung. Das liest die aktuellen Daten und erzeugt daraus die *.geo und *.hash files.

Den aktuellen Stand können Sie wie folgt prüfen: Es wurde in dem Verzeichnis C:\inetpub\wwwroot\MumGeoData\TileUpdater eine *.map Datei erstellt mit dem aktuellen Datum:

In dem dazugehörigen Verzeichnis müssen jetzt aktuellen *.geom und *.hash Dateien vorhanden sein

Ab diesem Stand kann diese Karte im TileUpdater jetzt als automatischer Task laufen und aktualisiert werden! Beim nächsten Lauf vom TileUpdater werden die vorhandenen *.geo und *.hash files mit der Datenbank abgeglichen. Daraus erkennt die Software nun, welche Geometrie (oder Attribute mit Auswirkung auf die Darstellung) geändert wurden. Die Änderungen werden jeweils im Verzeichnis C:\inetpub\wwwroot\MumGeoData\TileUpdater\Invalidate geschrieben. Man kann die *.xml Dateien mit einem Editor öffnen und schauen, was dort genau geändert wurde. Gleichzeitig werden die *.geo und *.hash Files auf den neusten Stand gebracht. Im Verzeichnis C:\inetpub\wwwroot\MumGeoData\TileUpdater\Invalidate sieht man die jeweiligen Durchläufe des Updaters. Der Dateiname hat das Datum und Uhrzeit im Name. In diesen Dateien stehen die Änderungen, die der TileServer durchführen soll. Ganz am Schluss wird nun vom TileUpdater der TileServer aufgerufen und die Datei mit den Änderungen übergeben. Die *.xml- Dateien im Verzeichnis C:\inetpub\wwwroot\MumGeoData\TileUpdater\Invalidate werden nicht von der Software gelöscht. Der Anwender kann diese bei Bedarf manuell löschen!

Der TileServer ersetzt die bestehende alte Kacheln durch neue Kacheln. Der TileServer startet und kachelt neu! Es werden nicht zuerst alle die geänderten Kacheln gelöscht und dann die fehlenden neu erzeugt, sondern die Kacheln werden wirklich ersetzt. D.h. wenn irgendwas beim Update schief läuft, hat man am nächsten Tag immer noch Kacheln (wenn auch teilweise mit altem Zustand). Man sollte diese ganze Aktion nach Feierabend laufen lassen, da das Rendern der Kacheln etwas dauert und den Server belastet. Das reine herausfinden, welche Geometrie geändert wurden, geht verhältnismäßig schnell und ist natürlich abhängig von der Anzahl der Layer, der Datenmenge etc. Ist das automatische Update mal nicht durchgelaufen, kann man diese Dateien auch nachträglich manuell ausführen, um das Update nachzuholen. Der Aufruf lautet wie folgt (Dateinamen und Servernamen entsprechend ersetzen) und wird im Browser abgesetzt:

http://servername:8080/TileServer/TileServlet?invalidate&url=http://servername/MumGeoData/TileUpdater/Invalidate/Osnabrueck.3 1112012_104218.xml

In der TileUpdater-Log wird angezeigt, wann welche Karte und wie viele Änderungen gemacht wurden. Die Log-Datei wird Ihnen unter Projekt/TileServer Manager/TileUpdater Log angezeigt:

Dazu muss in der Web.config von MapEdit, zu finden unter C: \inetpub\wwwroot\Mum.Geo.Services zwischen <appSettings> und <appSettings> folgendes eingetragen werden:

<add key="TileUpdaterPath" value="C:\interpub\wwwroot\MumGeoData\TileUpdater\"/>

Bei Value den richtigen Pfad eintragen. Der IIS muss Zugriff auf diesen Pfad haben. Wird dieser Eintrag nicht gemacht, dann nimmt die Software automatisch den Standardpfad: C:\inetpub\wwwroot\MumGeoData\TileUpdater.

Task/Aufgabenplanung für automatisches Update einrichten

Die Idee ist, dass man einen oder mehrere Scheduled Tasks/Aufgabenplanungen in Windows einrichtet, die automatisch nach Dienstschluss oder am Wochenende gestartet werden und das Update der Kacheln durchführen. Hier die wichtigsten Einstellungen bei der Erstellung einer Aufgabenplanung.

Achten Sie auf Ihre Sicherheitsoptionen, damit die Software auch ohne Benutzeranmeldung starten kann. Dann erstellen Sie den für Ihre Umgebung besten Zeitplan – bedenken Sie dabei, ob der Server automatisch zu einer bestimmten Uhrzeit neu gestartet wird, wann Updates eingespielt werden oder wann auf dem Oracle Server eine Sicherung läuft, so dass die Oracle Datenbank eventuell blockiert sein kann etc.

Dann geht es mit Aktionen *Programm starten weiter. Wählen Sie über durchsuchen die Mum.Geo.TileUpdater.exe und geben den Argumente hinzufügen die MapDefinitions an, die aktualisiert werden sollen. Und zwar werden die einzelnen TileServer-Kartennamen mit einem Leerzeichen hintereinander aufgelistet.

Ausgeführt werden kann die Aktion nur, wenn sich der Server im Netzbetrieb befindet, da die Software Zugriff auf die Oracle Datenbank und den TileServer benötigt:

Bei den Einstellungen können Sie die Voreinstellung belassen. Der TileUpdater kann auch per Kommandozeile gestartet werden. Dann die Namen der MapDefinitions die upgedated werden sollen mit Leerzeichen getrennt angeben und alles in einer *.bat-Datei speichern. Diese kann bei Bedarf manuell per Doppelklick gestartet werden.

Beispiel: Mum.Geo.TileUpdater.exe Osnabrueck ALK Gruen

Wenn man die TileUpdater.exe in Windows als Scheduled Task einbindet, dann muss man dort den Windows Account einstellen unter dem man das Ganze getestet und aufgesetzt hat. Denn die Einstellungen werden Windows Account User-Abhängig gespeichert.

Die Einstellnugen stehen daher hier:

C:\Users\ WINDOWS BENUTZER NAME \AppData\Roaming\MUM\Mum.Geo.TileUpdater.sod

Wenn man also die exe zum Testen mit dem Windows User "Hans-Tester" ausführt und danach im Scheduled Task unter "Administrator" ausführt, dann nimmt sie nicht die richtigen Einstellungen....

Bekannte Probleme

Die Länge darf nicht kleiner als 0 (null) sein.

Wenn Sie diese Meldung bekommen:

Die Länge darf nicht kleiner als 0 (null) sein.

Dann sind Fehler in den MapGuide Einstellungen (Layern/Datenbank Verbindungen etc.)

Führen Sie "Validieren" in MapGuide Maestro / Studio aus und korrigieren Sie die Fehler.

Error: Map XY is already running at the moment.

Die Meldung:

Error    : Map XY is already running at the moment. 
Please try again later or delete the *.isrunning File if you are sure that no other TileUpdater is running

Kommt im Normalfall wenn man versucht den TileUpdater für eine Karte (in dem Fall IBA_GA_WP_500) auszuführen während der TileUpdater gerade für die gleiche Karte läuft.

Wenn das Programm beendet oder abgestuerzt ist (z.B. wenn jemand den Rechner neu startet) dann kann es sein das die *.isrunning Datei nich vorhanden ist.

Diese muss dann gelöscht werden. Dann während der Tile Updater nicht läuft wie in der Fehlermeldung gesagt alle *.isrunning Dateien löschen.

Diese findet man in C:\inetpub\wwwroot\MumGeoData\TileUpdater\

Error calling TileServer

Die Meldung:

Error calling TileServer: http://test:8080/TileServer/TileServlet?invalidate&url=http%3a%2f%2fsv000151%2fMumGeoData%2fTileUpdater%2fInvalidate%2fIBA_GA_WP_500.06092022_050018.xml&seq=20220906A050034722
Error Message: The operation has timed out

Bedeutet das der TileServer nicht aufgerufen werden konnte. Der TileServer löscht und erzeugt die Kacheln, nicht der Tile Updater. Der TileUpdater ruft nur den TileUpdater auf und sagt ihm welche Kacheln (via der Koordinaten) neu erzeugt werden müssen.

Wenn der TileServer warum auch immer nicht läuft werden keine Kacheln erzeugt oder ggf werden nur kacheln gelöscht und keine neuen erzeugt.

Dann in den Browser gehen und die URL die bei "Error calling TileServer" ausführen.

http://test1:8080/TileServer/TileServlet?invalidate&url=http%3a%2f%2fsv000151%2fMumGeoData%2fTileUpdater%2fInvalidate%2fIBA_GA_WP_500.06092022_050018.xml&seq=20220906A050034722

Wenn diese nicht geht dann ist da was fault. GGf kommt dort auch eine Meldung zureuck was nicht stimmt. z.B. das die URL falsch ist und es den Server http://test:8080/ nicht gibt (weil vielleicht der TileServer umgezogen wurde oder der Techner nicht mehr im Netz ist etc) also dieser nicht antwortet.

Wenn die URL läuft aber keine Kacheln erzeugt werden (und wie in dem Fall nur gelöscht werden) dann in das Log vom TileServer schauen, dort wird protokoliert warum der TileServer nicht geht.

Error Message: The underlying connection was closed: An unexpected error occurred on a receive.

Die Meldung:

Error Message: The underlying connection was closed: An unexpected error occurred on a receive.

Bedeutet das es ein Netzwerk Problem gab und der vorgang mitten drinn abgebrochen wurde. z.B. wenn der TileServer rechner nicht erreichbar ist weil er mitten drinn neu gestartet wurde, oder auch wenn das Netzwerk unzuverlässig ist. Solche Problem muss dann ggf der Netzwerkfachmann anschauen warum sein Netzwerk nicht sauber läuft.