Dynamische Kartenlayer
Einbindung von dynamischen Kartenlayern z.B. Bebauungspläne
Ziel ist es in MapEdit georeferenzierte gescannte Karten oder DWGs als dynamischen Layer automatisch anzuzeigen und das Ganze über eine einfache Suche zu integrieren. Das Problem ist oft, das bei sehr vielen gescannt vorliegenden Karten (> 100) die MapGuide Karte mit den einzelnen Layern sehr langsam und die Konfiguration dieser Karte sehr umständlich ist. Es muss für jede gescannte Karte ein Layer angelegt werden und der Layer in der MapEdit Legende aus dieser langen Liste gesucht werden. Hierfür bietet MapEdit die Lösung, dass Layer über eine ID oder einen Namen über die Suche gefiltert und automatisch als temporäre Layer eingeblendet werden – ohne das der Anwender in einer endlosen Liste suchen muss. Technisch gesehen erzeugt die Suche via SQL zur Laufzeit dynamisch eine/mehrere URLs zu WMS Karten und diese Karten werden in MapEdit dann automatisch angezeigt.
Voraussetzung
Grundlage für diese Lösung ist eine Map 3D Fachschale, die die Geometrie (also die Lage im Koordinatensystem als Flächenumring oder Punkt) enthält und diese Objekte müssen über eine ID, Namen oder Nummer eindeutig gekennzeichnet sein. Diese Fachschale wird in MapEdit als MapGuide Karte eingebunden, damit ein Zoom auf die Geometrie erfolgen kann (in diesem Beispiel die Karte: BPlan Umringe).
Dazu werden die georeferenzierte Rasterkarten oder DWGs benötigt, die in MapGuide als WMS Layer einzeln angelegt werden. Wir zeigen hier ein Beispiel mit Bebauungsplänen auf, in der die Umringe der Bebauungspläne in einer Map 3D Fachschale verwaltet werden und es dazugehörig georeferenzierte gescannte Bebauungspläne gibt, die automatisch angezeigt werden sollen:
Dieses Beispiel beschreibt auch den komplexeren Weg, wenn es zu einer Karte weitere Änderungskarten gibt!
Temporäre Kartenlayer einrichten in MapEdit
In der Kartenverwaltung werden so viele WMS Layer erstellt wie gleichzeitig automatisch eingeschaltet werden sollen. Hat man pro Umring nur 1 gescannte Karte, dann genügt 1 Layer. Hat man für einen Bebauungsplan aber bis zu 5 Karten (Änderungen), dann müssen insgesamt 6 Layer definiert werden. Am besten man erstellt eine Gruppe – hier „BPläne“ und darunter über Karte hinzufügen die WMS Layer. Bei den WMS Layern muss die Großschreibung beachtet werden: LAYER1, LAYER2, LAYER3...
Wichtig ist das der Wert im Feld "URL" leer sein muss und im Feld "Internal Name" die richtige Schreibweise steht.
Hier sind jetzt 3 temporäre Layer verfügbar, die über die Suche bzw. deren Funktion angesprochen werden. Damit sind die Vorbereitungen in der Kartenverwaltung abgeschlossen.
WMS Layer einrichten in Maestro (MapGuide OS)
Für die Definition von den WMS Layern benötigt man MapGuide Maestro. Diese OpenSource Software kann kostenlos heruntergeladen und parallel zum autodesk Infrastructure Studio verwendet werden. http://trac.osgeo.org/mapguide/wiki/maestro/Downloads Zunächst werden die Datenquellen und die dazugehörigen Rasterkartenlayer im Maestro angelegt. Da für jede Karte, die angezeigt werden soll, ein Layer und somit auch eine Datenquelle erstellt werden muss, sollte man den XML Editor im Maestro verwenden. Hier kann man mit kopieren und einfügen schnell die Datenquellen und Layer erstellen. ZumBeispiel können die Datenquellen (und natürlich auch die Layer) kopiert und dann im XML Editor der Dateiname (bzw. der Name der Datenquelle) geändert werden:
Die Struktur in diesem Beispiel wird wie folgt aufgebaut. Projekt: BPlan Verzeichnis der Layer: Layers Und darunter befinden sich die einzelnen Layer: 160I / 160I_1 usw
In diesem Beispiel ist die Verbindung vom Geometrieobjekt zum temporären Layer (der den gescannten Bebauungsplan beinhaltet) die ID. Die ID aus der Tabelle wird hierbei für die URL des Layers übergeben. Alle diese URLs werden in die temporären Layer übergeben. Wichtig ist, dass unbedingt der Pfad bzw. die Struktur des MapGuide Repository richtig in das SQL für die Suche übergeben wird (Beschreibung im nächsten Kapitel). Die Benennung der Layer (der Bebauungspläne) muss in diesem Beispiel mit der ID (z.B. 160I ) einem Trenner (z.B. _ ) der AENDERUNG (z.B. 1 ) mit dem Inhalt des SQLs für die Suche übereinstimmen (Beschreibung im nächsten Kapitel). Damit diese Layer für WMS Dienste zur Verfügung stehen, muss im Maestro für jeden Layer über Rechte Maustaste/Eigenschaften die Eigenschaften für WMS eingetragen werden.
Die Min- und Max-Werte und die SRID übernimmt man aus der MapGuide Kartendefinition, die in diesem Beispiel die BPlan Umringe beinhaltet und somit das richtige Koordinatensystem und den richtigen Koordinatenbereich beinhaltet (der natürlich auch größer eingegeben werden kann):
Maestro bietet auch die Möglichkeit die Eigenschaften für die WMS per XML Editor zu kopieren. Dazu tragen Sie in den Eigenschaften einmal die richtigen Werte im Register WMS ein und dann auf dem Layer Rechte Maustaste/Edit Raw Header XML:
Der Inhalt kann kopiert und bei den anderen Layer eingefügt werden. Damit sind die Vorbereitungen im Maestro abgeschlossen.
Suche in MapEdit konfigurieren
Über die Suche wird der entsprechende BPlan gefunden und automatisch zu diesemhingezoomt. Gleichzeitig wird der dazugehörige Layer als temporärer Layer eingeblendet. Es werden alle vorhandenen Änderungen bzw. Layer eingeblendet die das SQL zurückliefert. Die Suche wird zunächst ganz einfach auf die Umringe (in diesem Beispiel in der Tabelle bplan) eingerichtet:
Und die ID (bzw. der Wert über den gesucht wird) muss mit dem Layernamen in Maestro übereinstimmen! Der Name bzw. die ID vom BPlan lautet hier 160I aus der Tabelle bplan:
Wichtig: Bei vorhandenen Bebauungsplanänderungen, die auch mit angezeigt werden sollen, muss (wie im vorigen Kapitel beschrieben) die Benennung der Layer im Maestro in diesem Fall mit der ID (z.B. 160II ) einem Trenner (z.B. _ ) der AENDERUNG (z.B. 1 ) übereinstimmen (160I_1), weil das in dem SQL der Suche auch so definiert ist. Das SQL Statement in der Suche wird hier gleich beschrieben. Und die Besonderheit in diesem Beispiel ist, das die Änderungsnummern der Karten in einer anderen Tabelle stehen:
Weiter wird die Suche über den Schalter More.. konfiguriert. Im Register Geometry wird wie im Standard die Geometrietabelle ausgewählt und die FID in geschweifte Klammern eingetragen:
Die Einträge im Register Dialog kann man optional machen. Und jetzt kommen wir zur eigentlichen Funktion der Suche: Im Register Temporary Layers wird der Aufruf der WMS über ein SQL definiert. Das ist der Aufruf der weitergegeben wird, wenn bei der Suche die ID eingegeben wird:
Dieses SQL beinhaltet den Aufruf der WMS Karte(n) über die (hier im Beispiel verwendete) ID und muss entsprechenden angepasst werden. Mit diesem SQL wird für dieses Beispiel festgelegt, das die Änderungen über ||ID||‘_|‘| AENDERUNG als WMS Layer bei MapGuide abgefragt werden. Und in diesem Beispiel stehen die Änderungen in der Tabelle bplanuebersicht1 in der Spalte AENDERUNG. Hier das SQL aus dem Register Temporary Layers:
select ID,
'http://localhost/mapserver2013/mapagent/mapagent.fcgi?
REQUEST=GetMap&SERVICE=WMS&VERSION=1.1.1&FORMAT=image/png&Layers=BPlan%
2fLayers%2f'||ID||'&SRS=EPSG:25832&BBOX={XMin},{YMin},{XMax},{YMax}
&Width={DisplayWidth}&Height={DisplayHeight}&TRANSPARENT=TRUE', '0' as AENDERUNG
from bplan where fid={FID}
UNION
select ID||'_'||
AENDERUNG,'http://localhost//mapserver2013/mapagent/mapagent.fcgi?
REQUEST=GetMap&SERVICE=WMS&VERSION=1.1.1&FORMAT=image/png&Layers=BPlan%
2fLayers%2f'||ID||'_'||AENDERUNG||'&SRS=EPSG:25832&BBOX={XMin},{YMin},{XMax},
{YMax}&Width={DisplayWidth}&Height={DisplayHeight}&TRANSPARENT=TRUE', AENDERUNG from bplanuebersicht1 where id='{ID}' order by AENDERUNG
Kopieren Sie sich dieses SQL in ein Notepad und passen Sie die fettgedruckten Werte an Ihr Projekt an. Die rot markierten Werte benötigt man nur, wenn man zusätzlich zu der eigentlichen Karte auch Änderungen hat! Und in diesem SQL sollten keine weiteren Zeilenumbrüche vorhanden sein wie in der Abbildung oben zu sehen sind. Start der Suche: Ist die Suche fertig konfiguriert, veröffentlichen Sie das Projekt und schließen den Browser. Nach einem Neustart von MapEdit sollte die Suche wie folgt funktionieren. Die Suche erfolgt über die manuelle Eingabe der ID (oder der verwendeten Nummer oder Name) und sofort liefert die Suche Ergebnisse zurück:
Klickt man jetzt auf die gesuchte ID dann erfolgt ein Zoom auf den Umring des BPlanes und es werden automatisch die temporären Layer eingeblendet. Diese können jetzt auch manuell ein- und ausgeschaltet werden: