Liedtke.IT

Beratung - Projektmanagement – Programmierung – Support

Home  |   Biete  |   Website warum?  |   Produkte  |   Open Source  |   Kontakt  |   Impressum/Datenschutz
OpenGeoDB

Das Projekt OpenGeoDB sammelt Geodaten zu allen Orten, im deutschsprachigen Raum und teilweise den angrenzenden Ländern. Das Projekt ist unter http://opengeodb.giswiki.org/wiki/OpenGeoDB ausreichend beschrieben. Unter fa-technik.adfc.de/code kann man sich die aktuelle vollständige Datenbank herunter laden und dann für eigene Zwecke nutzen (Menü "Dateien").

Die Datenbank ist allerdings recht komplex. Es gibt jedoch auch eine einfache Variante der Datenbank im gleichen Verzeichnis. Es gibt für jedes Land eine eigen Datei, für Deutschland z. B. die Datei DE.tab. Sie ist lediglich 5,3 MB groß, im Gegensatz zu 60 MB der gesamten Datenbank, und enthält doch alle interessanten Daten. Die Arbeit mit dieser Datei möchte ich im Folgenden beschreiben.

DE.tab ist eine Textdatei mit Daten zu allen Orten. Die Spalten sind durch Tabulatoren und die Datensätze durch Zeilenumbruch getrennt. Charset ist utf8. Folgende Daten enthält die Datei: loc_id ags ascii name lat lon amt plz vorwahl einwohner flaeche kz typ level of invalid. Neben den Geokoordinaten lat und lon werden auch Postleitzahl, Vorwahl, Einwohner Fläche und Kfz-Kennzeichen gespeichert. level of gibt die loc_id des übergeordneten Elementes an. Kiel hat z. B. die loc_id 469. level of ist 119. loc_id 119 ist Schleswig-Holstein. Auf diese Weise sind alle Orte über mehrere Ebenen hierachisch verbunden.

Nun ist es einfach möglich, die Datei DE.tab zu parsen und z. B. mit einem PHP Programm zu durchsuchen. Schöner und preformanter ist es jedoch, die Daten in eine Datenbank wie z. B. MySQL einzufügen. Dazu ist lediglich eine Tabelle notwendig, die wie folgt erzeugt werden kann:

CREATE TABLE  `geodaten` (
  `loc_id` int(11) NOT NULL,
  `ags` varchar(10) COLLATE latin1_german1_ci NOT NULL,
  `ascii` varchar(80) COLLATE latin1_german1_ci NOT NULL,
  `name` varchar(80) COLLATE latin1_german1_ci NOT NULL,
  `lat` double NOT NULL,
  `lon` double NOT NULL,
  `amt` varchar(80) COLLATE latin1_german1_ci NOT NULL,
  `plz` text COLLATE latin1_german1_ci NOT NULL,
  `vorwahl` varchar(10) COLLATE latin1_german1_ci NOT NULL,
  `einwohner` int(11) NOT NULL,
  `flaeche` float NOT NULL,
  `kz` varchar(10) COLLATE latin1_german1_ci NOT NULL,
  `typ` varchar(80) COLLATE latin1_german1_ci NOT NULL,
  `level` int(11) NOT NULL,
  `of` int(11) NOT NULL,
  `invalid` int(11) NOT NULL,
  PRIMARY KEY (`loc_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
									
DE.tab kann danach direkt über phpMyAdmin importiert werden. Unter Importieren gibt man die Datei DE.tab an, Dateiformat ist CSV, Felder getrennt mit: \t, Felder eingeschlossen von: leer. Nun sollten rund 61000 Datensätze in der Datenbank sein. Wer Daten vermisst, kann diese direkt hier eingeben und gleich danach die neue DE.tab herunter laden. Sie wird nach jeder Korrektur neu erzeugt.

Weiter zur Anwendung