![]() |
Ort anhand der PLZ füllen - ?OpenGeoDB?
Ich habe ein Adressverwaltungsprogramm (DB ist mySQL), welches ich nun insofern erweitern soll, dass bei Eingabe der PLZ der Ort automatisch gefüllt werden soll.
Meine Recherchen bezüglich der Datenverfügbarkeit PLZ/Ort haben mich zu OpenGeoDB geführt. Doch irgendwie blicke ich da noch nicht so richtig durch. - Macht es nun Sinn für mich, eine neue Datenbank für die OpenGeoDB auf meinem mySQL-Server anzulegen und einen Dump einzulesen? (Viele Daten von denen ich die meisten im Moment gar nicht brauche. Aber dann wäre ein Update der Daten einfacher?) - Oder ziehe ich mir nur die Textdatei plz.tab (oder nur PLZ und Ort) in eine neue Tabelle meiner vorhandenen DB? (dann könnte ich die Daten nicht vernünftig updaten?) - Oder gäbe es da auch eine Delphi-Komponente, die mir den Ort ausm Internet holt? Sicherlich hat der ein oder andere von euch sich mit dem Thema schon mal auseinandergesetzt und kann mir dazu wertvolle Tipps geben. Danke im Voraus |
AW: Ort anhand der PLZ füllen - ?OpenGeoDB?
Hallo,
hab' mir die Datei PLZ.tab gerade mal angeschaut. Würde hier eine eigene Tabelle in meiner DB anlegen und die Textdatei importieren. Beim Update ein Truncate auf die eigene Datenbanktabelle und anschließend eine neue PLZ.tab einlesen. (Bei fremden Daten immer alles Eigene wegwerfen und vollständig neu einlesen. - Eine "eigene" Pflege der Tabelle PLZ.tab muss dann aber zwingend unterbleiben.) Wenn die Tabelle dauerhaft unter ![]() Im Programm könnte man die "eigene" Datenbanktabelle für PLZ.tab als Nachschlagtabelle hinter das Postleitzahlenfeld legen. Mit einer TDBLookupComboBox wäre das recht einfach zu lösen, man hat dann nach der Eingabe einer PLZ automatisch den Ort dazu. Die PLZ.tab scheint aber keine Postfachpostleitzahlen zu enthalten, hier würde ein Nachschlagen daher nicht funktionieren. Wäre das bei Deinem Programm erforderlich? |
AW: Ort anhand der PLZ füllen - ?OpenGeoDB?
Danke dir nahpets. Ja, deine vorgeschlagene Vorgehensweise war auch mein erster Gedanke. Aber ich weiß eben nicht, ob diese Datei immer dort zum download liegt und immer genau so heißt und immer dieselbe Struktur hat. Ist das UTF-8? Sieht in meinem Windows so komisch aus.
Zitat:
|
AW: Ort anhand der PLZ füllen - ?OpenGeoDB?
Hallo,
das scheint kein UTF8 zu sein, sondern eine reine Textdatei, mein Editor kommt jedenfalls mit den Umlauten klar, also ein Windowszeichensatz. Naja, ob die Datei immer da liegt und immer die gleiche Struktur haben wird und immer in der Struktur unverändert bleiben wird? Nix genaues weiß man nicht. Eine eigene Datenbanktabelle hätte dann aber den Vorteil, Du könntest aus Daten einer anderen Quelle durch eine neue Importroutine Deine bisherige Tabelle befüllen und müsstest dann im Programm und im Datenbankschema nichts ändern. Außerdem müsstest Du dann nur die tatsächlich von die benötigten Daten einlesen, kannst also alle Spalten der PLZ.tab verwerfen, die Du nicht benötigst. Beim Einlesen eines Dumps bekommst Du automatisch neue oder veränderte Strukturen und musst dann Programm und/oder Datenbankroutinen ändern und ggfls. alles ausliefern. Eine veränderte Textdatei führt zu weniger Aufwand, da nur Einlesescripte bzw. Konvertierroutinen geändert werden müssen. Hier ist eine weitere Quelle für die Tabelle ![]() Falls Du in einer anderen Quelle noch Postfachpostleitzahlen mit Orten finden solltest, könntest Du die Daten auch in einer Tabelle zusammenfügen, was bei einem Dump nicht möglich ist. Bei mehreren Quellen in einer Datenbanktabelle könntest Du noch ein Feld "Quelle" in Deine Tabelle einfügen und dieses zusammen mit den Daten befüllen, dann kannst Du bei einem Update ein Delete from Tabelle where Quelle = 'Lieferant' machen und anschließend neu einlesen. Vermutlich bist Du mit dem Einlesen von Textdateien auf Dauer flexibler, als mit dem Einlesen von Datenbankdumps und kannst mit weniger Aufwand auf "externe" Änderungen reagieren. Bei einem Dump bist Du darauf angewiesen, dass er für "Deine" Datenbank zur Verfügung steht. Wenn Du nun (warum auch immer) von MySQL auf PostGres, Oracle, FireBird... wechselst, bekommst Du garantiert erstmal ein Problem, mit Einleseroutinen für Textdateien musst Du "nur" die Datenbankverbindung ändern und schon ist diese Aufgabe erledigt (ok, könnte ein bisserl mehr werden, aber sicherlich weniger, als nötigenfalls zwei Datenbanken zu unterstützen, eine für Deine Daten und eine für die Postleitzahldaten.) |
AW: Ort anhand der PLZ füllen - ?OpenGeoDB?
Zitat:
Zitat:
Die flexibelste Lösung wäre es, wenn du die Daten in einem bestimmten Format auf deinem eigenen Server bereitstellst und damit die Herkunft der Daten einfach ändern kannst ohne den Klienten anzufassen. Zudem könntest du Daten aus verschiedenen Quellen zusammenführen und die Server der Quellen würden entlastet. |
AW: Ort anhand der PLZ füllen - ?OpenGeoDB?
|
AW: Ort anhand der PLZ füllen - ?OpenGeoDB?
Hallo ,
@BUG Zitat:
Ja, hast recht, ist UTF8, wußte garnicht, dass per Copy&Paste von Firefox nach Uralteditor konvertiert wird, ohne dass man das mitkriegt. Reine Textdatei ist für mich sowas wie Zeichensatz für MS-Dos(e) oder Ansi ;-) @baumina Zitat:
Die Grosskundentabelle der UNI-Mainz ist vom 01.12.1993, also nicht zwingend aktuell. Hiermit bist Du mit einer eigenen Datenbanktabelle und eigenen Einleseroutinen flexibler als mit Datenbankdumps für die PLZ.tab... Wir bedienen uns bei Oracle immer des SQL-Loaders. Die Quelldaten werden per FTP von verschiedenen Quellen gezogen und alles per Script verarbeitet. Bei Änderung der Quelladresse muss nur die FTP-Verbindung geändert werden, bei Änderungen an der Datenstruktur werde die SQL-Loaderscripte geändert. In der Regel sind die Änderungen in wenigen Minuten erledigt und wir müssen nur die Daten übernehmen, die wir benötigen und nicht in episch gelieferter Breite. |
AW: Ort anhand der PLZ füllen - ?OpenGeoDB?
|
AW: Ort anhand der PLZ füllen - ?OpenGeoDB?
Zitat:
Gruß K-H |
AW: Ort anhand der PLZ füllen - ?OpenGeoDB?
Zitat:
![]() Da gibts CSV Datei..einfach in eine Datenbank zu uebernehmen und vorallem AKTUELL :-D |
AW: Ort anhand der PLZ füllen - ?OpenGeoDB?
@p80286
Zitat:
Die Postleitzahlen für Leipzig (Straße-, Postfach- und Großkundenpostleitzahl) dürften z. B. von bis 04000 bis 04399 reichen. Wenn's was kosten darf, dann ist die Post mit ihren Daten sicherlich immer die erste und beste Quelle. |
AW: Ort anhand der PLZ füllen - ?OpenGeoDB?
Zitat:
Aber besser als gar nichts. |
AW: Ort anhand der PLZ füllen - ?OpenGeoDB?
Denkt daran, das es zu einer PLZ mehrere Orte geben kann.
Da sich PLZ nicht so oft ändern, wäre es sinnvoll, die Daten in der DB vorzuhalten. Ich halte nicht viel von diesem Stückelzeugs, wo man sich die Daten zusammensuchen muss. Ein Fehler, und sei es eine defekte Datei, und das ganze System spinnt, bzw. eben nicht und bombt irgendwann aus. Dann doch lieber alles in einer DB, wo die Integrität zudem gewährleistet ist. |
AW: Ort anhand der PLZ füllen - ?OpenGeoDB?
Zitat:
![]() Zitat:
|
AW: Ort anhand der PLZ füllen - ?OpenGeoDB?
Zitat:
|
AW: Ort anhand der PLZ füllen - ?OpenGeoDB?
Zitat:
![]() ![]() Meine Vermutung ist momentan: Die Datei DE.Tab enthält alle Orte mit ihrer "Hauptpostleitzahl", während die PLZ.tab alle weiteren Postleitzahlen zu den Orten enthält. Es wird also für eine Nachschlagtabelle eine Kombination aus diesen beiden Dateien benötigt. Schaut man sich alle Dateien unter o. g. Link an, so findet man (vermutlich) die vollständigen Scripte, um sich eine MySQL-Datenbank aufzubauen (einschließlich der Create-Table...-Statements) und kann sich damit seine eigene OpenGeoDB erstellen. |
AW: Ort anhand der PLZ füllen - ?OpenGeoDB?
Danke an Euch alle, die sich mit mir den Kopf zerbrochen haben und für die, die eine ähnliche Lösung suchen.
Meine Lösung sieht nun folgendermaßen aus: Ich habe beschlossen die gesamte OpenGeoDB via Dump als eigene DB in mein mySQL zu nehmen. Mein select, um den Ort via PLZ zu suchen sieht folgendermaßen aus:
SQL-Code:
SELECT Ort.text_val
FROM opengeodb.geodb_textdata PLZ JOIN opengeodb.geodb_locations LPLZ ON (PLZ.loc_id = LPLZ.loc_id) JOIN opengeodb.geodb_hierarchies HPLZ ON (PLZ.loc_id = HPLZ.loc_id) JOIN opengeodb.geodb_textdata Ort ON (PLZ.loc_id = Ort.loc_id) JOIN opengeodb.geodb_textdata Land ON (HPLZ.id_lvl2 = Land.loc_id) WHERE PLZ.text_val = '<gesuchte PLZ>' AND Land.text_val = '<gesuchte Länderkennung>' // D(Deutschland), A(Österreich), CH(Schweiz), B(Belgien), FL(Lichtenstein) AND Ort.text_locale = 'de' // deutscher Name des Ortes AND PLZ.text_type = 500300000 // 500300000=PLZ AND LPLZ.loc_type = 100600000 // 100600000=Politische Gliederung (weil ich die ganzen Teilorte nicht haben mag) ansonsten // 100800000=Postleitzahlgebiet mit allen Teilorten AND Ort.text_type = 500100000 // 500100000=Ortsname AND Land.text_type = 500500000 // 500500000=Länderkennung ORDER BY Ort.text_val; |
AW: Ort anhand der PLZ füllen - ?OpenGeoDB?
OpenGeoDB ist immer so ein Thema. Theoretisch steht alles drin, aber teilweise auch einfach doppelt und manchmal in der falschen Hierarchieebene. Mein Favorit ist der Eintrag "überhprüft das eigentlich irgendwer".
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz