Datensuche in OpenGeoDB Teil 1

Wer kostenfreie Geodaten für seine Web-Anwendung sucht, trifft früher oder später auf OpenGeoDB. In den beiden Artikeln soll dargestellt werden, wie die Daten aus der OpenGeoDB genutzt werden können, um für Deutschland die Ebenen Bundesland, Landkreise, Städte und Stadtteile in eigenen Tabellen sinnvoll zu erfassen. Zwar sind die Daten einheitlich erfasst, aufgrund der föderalen Struktur der Bundesrepublik Deutschland und der unterschiedlichen Binnenstruktur der einzelnen Bundesländer führen Suchen anhand des Konzeptes der OpenGeoDB nicht immer zum gewünschten Ziel.

Suchen und bearbeiten der Datenbestände: http://fa-technik.adfc.de/code/opengeodb.pl

OpenGeoDB hat sich zum Ziel gesetzt, eine möglichst umfassende Sammlung von Geokoordinaten für Ortschaften und Postleitzahlen in Deutschland, Österreich, Schweiz, Belgien und Liechtenstein zu bieten. Da die Mitarbeit auf freiwilliger Basis beruht, kann nicht erwartet werden, dass alle Daten vollständig vorhanden sind. Jeder kann aber zur Verbesserung der Daten beitragen. Auf die Struktur der Tabellen der OpenGeoDB wird nur am Rande eingegangen.

1. Fall: Suche nach Bundesländern

Zunächst werden aus der Tabelle `geodb_locations` alle loc_ids selektiert, die den loc_type ‚100300000‘ (Bundesland) haben. Die Bezeichnung der Bundesländer erhält man, indem die Einträge für diese loc_ids aus der Tabelle `geodb_textdata` mit dem text_type ‚500100000‘ (Name) selektiert. Im Feld ‚text_val‘ sind die Bezeichnungen der Bundesländer hinterlegt. Diese können dann in eine eigene Tabelle ‚Bundesland‘ eingetragen werden.

2. Fall: Suche nach Landkreisen und kreisfreien Städten

Hier muss bereits zwischen Stadt- und Flächenstaaten unterschieden werden. In Berlin, Bremen und Hamburg entfällt die Ebene der Landkreise – könnte man meinen. Im Falle des Bundeslandes Bremen finden sich auf der nächsten Ebene mit Bremen und Bremerhaven sogar zwei eigenständige Städte. In Flächenländern kommen uns dafür dann und wann auch nicht mehr vorhandene Regierungsbezirke in die Quere, die einen direkten Zugriff verhindern. Und es gibt eine Vielzahl an kreisfreien Städten, die organisatorisch zwar auf der gleichen Ebene wie Landkreise angesiedelt sind, nach denen aber in der Form kein Nutzer suchen wird.

Betrachten wir die Bundesländer daher im einzelnen:

Für Hamburg, Bremen und Berlin ist ein Eintrag als Landkreis sinnlos. Diese Ebene wird übersprungen, muss aber bei der Suche auf der Ebene Stadt bzw. Stadt- und Ortsteile berücksichtigt werden.

Für Schleswig-Holstein, das Saarland, Brandenburg, Mecklenburg-Vorpommern, Sachsen-Anhalt und Thüringen kann direkt auf die Landkreise durchgegriffen werden. Die loc_ids der Landkreise und kreisfreien Städte  ergeben sich bei der Suche nach Datensätzen in geodb_textdata, bei denen loc_type ‚400100000‘ (Teil von) und text_val die loc_id des jeweiligen Bundeslandes ist. Die Landkreise selbst können dann über eine Abfrage isoliert werden, ob zu den loc_ids ein Datensatz mit loc_type ‚400300000‘ (Typ) und text_val ‚Kreis‘ oder ‚Landkreis‘ existiert. Alle anderen loc_ids beziehen sich auf kreisfreie Städte.

In Niedersachsen, Nordrhein-Westfalen, Hessen, Rheinland-Pfalz, Baden-Württemberg, Bayern und Sachsen muss noch eine weitere Ebene berücksichtigt werden (Regierungsbezirke, ehemalige Regierungsbezirke, Direktionsbezirke,…). Daher müssen für diese Bundesländer zunächst die loc_ids dieser Ebene identifiziert werden (loc_type ‚400100000‘ und text_val die loc_id des jeweiligen Bundeslandes). Diese loc_ids bilden dann die Basis für die Suche nach Kreisen und kreisfreien Städten analog z.B. des Bundeslandes Sachsen-Anhalt.

Alle somit identifizierten Landkreise können dann in einer Tabelle ‚Kreise‘ gesammelt werden, in denen die Kreise mit dem jeweiligen Bundesland verknüpft sind.

Im zweiten Teil wird dann gezeigt, wie die Daten für mögliche neue Tabellen ‚Orte‘ und ‚Ortsteile‘ aus der Tabelle ‚geodb_textdata‘ herausgefiltert werden können.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.