Karten von Weihnachtsmärkten werden immer beliebter… und sinnvoller. Gerade für Touristen sind sie eine große Hilfe, um bestimmte Buden oder den Weg zum nächsten Glühweinstand zu finden. Oder andere Köstlichkeiten, mjam. Dieses Jahr gibt es das erste Mal eine Beta-Version des Leipziger Weihnachtsmarktes in 3D, inklusive Suche und Anzeige auf mobilen Geräten.

Der Leipziger Weihnachtsmarkt in 3D | Stadt Leipzig, Amt für Geoinformation und Bodenordnung
Der Leipziger Weihnachtsmarkt in 3D | Stadt Leipzig, Amt für Geoinformation und Bodenordnung

Die Navigation geht per Maus oder Toucheingabe sehr einfach von der Hand. Die Suche ist nicht perfekt, aber funktioniert. Und zu den meisten Ständen gibt es sogar ein Foto, so dass man ihn auch vor Ort nicht verfehlen kann. Die Darstellung ist mit ArcGIS Online realisiert, die Daten selbst waren alle in der Stadtverwaltung vorhanden; es musste also nichts neu erfasst werden. Es kann sich also durchaus lohnen, mal in seinen Datenbeständen zu kramen, um damit neue Karten zu generieren. So, jetzt muss ich aber los, die nächsten Kräppelchen essen (:

Weiterführende Informationen:
Direktlink zur 3D-Karte
Leipziger Weihnachtsmarkt 2017

Die Projekte von ArcGIS Desktop sind in mxd-Dateien gespeichert. Hat man wie ich viele Dateien die auch noch jeweils viele Layer haben, ist es sehr mühselig und zeitaufwändig alle Layer in jeder mxd per Hand zu aktivieren. Deshalb habe ich mir ein kleines Pythonskript zusammengesetzt, was diese lästige Aufgabe übernimmt:

(Bitte vorher ein Backup der mxds anlegen, um die alten Layersichtbarkeiten bei Bedarf wieder herzustellen.)

# Import 
import arcpy
import os
import glob

# Create LayerList
list = glob.glob(r"Pfad\zum\mxd-Verzeichnis\*.mxd")

for k in list:
	# Select mxd
	mxd = arcpy.mapping.MapDocument(k)
	print "Processing "+k+"..."
	# Activate every Layer in mxd
	for lyr in arcpy.mapping.ListLayers(mxd):
		lyr.visible = True
	# Save the mxd-file
	mxd.save()

# Done
print "\nDone."

Den Inhalt einfach in eine Textdatei kopieren und in Zeile 7 das Verzeichnis eintragen, in dem die mxd-Dateien liegen. Die Datei unter einem beliebigen Namen als .py-Datei abspeichern und per Doppelklick ausführen. Damit das Skript sauber durchläuft, muss Python 2.7 und ArcGIS Desktop 10.2.2 (oder neuer) installiert sein.
Wozu das gut ist? Möchte man die Performance von vielen mxds per Skript testen (mxdperfstat), sollten vorher alle Layer aktiviert sein, um verlässliche Werte zu bekommen.

Ich hatte vor kurzem mit einem großen Datensatz (ca. 4 Millionen Linienobjekte) zu tun, der sich minutenlang im ArcGIS 10.2.2 aufgebaut hat. Die Daten befanden sich in einer ArcSDE in Oracle. Merkwürdig war, dass dieser aus einer anderen DB importiert wurde in der er sehr performant lief. Die erste Vermutung ging in Richtung des DB-Servers – allerdings waren andere Daten nicht von Performanceproblemen betroffen. Nach einigen Recherchen habe ich festgestellt, dass ArcGIS beim Kopieren der Daten keinen neuen räumlichen Index gerechnet hatte, was bei anderen Datensätzen offensichtlich automatisch passierte.

Der räumliche Index ist ein mehrdimensionales Gitter, welches über den Datensatz gelegt wird und über das ArcGIS die Daten abruft. Man könnte es sich als eine Art gecachtes Inhaltsverzeichnis vorstellen, ähnlich dem Gitternetz auf einer Straßenkarte. Dieser Index ist vor allem bei großen Datensätzen von entscheidender Bedeutung, da sonst die Geschwindigkeit des Kartenaufbaus deutlich darunter leidet.

Um einen räumlichen Index zu erstellen, klickt man im ArcCatalog mit der rechten Maustaste auf die FeatureClass > Eigenschaften und wählt den Reiter Indizes aus. Folgendes Fenster sollte zu sehen sein:

Indizes einer FeatureClass
Indizes einer FeatureClass
In diesem Fall existiert bereits ein Index mit dem Namen A2750_IX1. Sollte hier keiner vorhanden sein, kann mit einem Klick auf Erstellen und anschließend auf Übernehmen ein neuer gerechnet werden. Dies kann einige Minuten in Anspruch nehmen, je nach Größe der Daten. Der Klick auf Übernehmen scheint mir an dieser Stelle sehr entscheidend zu sein, da erst dann der Index auch berechnet wird.

Nachdem bei meinen Daten wieder ein Index vorhanden war, wurden diese in ArcMap innerhalb weniger Sekunden dargestellt.
Der Index ist sicher kein Allheilmittel für alle Performanceprobleme, allerdings ein guter Ansatz um die Ursache einzugrenzen.

Weiterführende Informationen:
Räumliche Indizes in Geodatenbanken
Erklärung zum Indexgitter