ZipToCity
ZipToCity - Automatisches Füllen des Ort-Feldes nach Eingabe der Postleitzahl
Version 1.2, 16/08/2004
Freie Software (LGPL Lizenz) von: Thorsten Sprenger (ziptocity@3sprenger.de)
ZipToCity ist eine Javascript-Funktion, die die Eingabe der Postadresse in einem HTML-Formular erleichtert. Nach Eintippen der Postleitzahl und dem Wechsel in das Ort-Eingabefeld wird der entsprechende Ort sofort angezeigt. Dies erhöht nicht nur den Komfort, sondern auch die Adressqualität, denn der Benutzer sieht bei fehlerhaften Postleitzahlen sofort den falschen Ort und kann seine Eingabe korrigieren.
Demo (hierzu wird das Unterverzeichnis "ziptocity" benötigt - bitte "ZIPTOCITY.ZIP" entpacken)
Reines statisches HTML+Javascript - keine serverseitigen Scripts erforderlich
ZipToCity lädt die Postleitzahlenbasis aus einer Liste von statischen HTML-Dateien. Vorteile:
- Hohe Performance - wichtig, da der Ort möglichst schnell angezeigt werden muß, um zu vermeiden, dass flinke Benutzer bereits den Ort eintippen, bevor er angezeigt wird. ZipToCity lädt die zu dieser PLZ passende PLZ-Gruppe aus einem Verzeichnis von ca. 850 HTML-Dateien. Eine statische HTML-Datei wird schneller geladen als ein serverseitiges Script, u.a. weil zwischen Browser und Website verschiedene Caching-Mechanismen (Proxy-Server) liegen.
- Einfach in bestehende Websites integrierbar (3 HTML-Zeilen hinzufügen).
- plattform-unabhängig (kein serverseitiges JSP, ASP.NET, PHP etc. notwendig).
- offline-fähig.
Browserkompatibilität
ZipToCity ist getestet auf IE5.0, IE5.2 (Mac), IE5.5, IE6.0, Opera 5/6/7,
Mozilla.
ZipToCity unterstützt nicht Netscape 4, da dieser Browser den W3C-Standard
<IFRAME> nicht unterstützt.
Einbinden von ZipToCity in HTML-Formulare
Der Quellcode des obigen Formulars ist:
<form name="register">
<script src="ziptocity/ziptocity.js"></script>
<iframe name=
"ziptocityframe" src=
"ziptocity/leer.gif" frameborder="0" height="0" width= "0"></iframe> Postleitzahl:
<input type="text" name="zipcode" id="zipcode" size="5"
onChange="javascript:ziptocity('zipcode','cityname')"> <br>
Ort: <input type="text" name="cityname" id="cityname" size="30"><br>
</form>
- Diese Zeile bindet die Javascript-Funktionen ein: <script src="ziptocity/ziptocity.js"></script>
- Diese Zeile definiert einen unsichtbaren Frame: <iframe name="ziptocityframe" ...> Er wird für das Laden der Postleitzahl/Ort-Zuordnungen benötigt.
- Diese Zeile startet die ZipToCity-Funktion: onChange="javascript:ziptocity('zipcode','cityname')". Das OnChange-Event wird ausgelöst, sobald das PLZ-Feld verlassen wird (per TAB oder Mausklick).
- Hinweis: Die Zeichenketten 'zipcode' und 'cityname' sind die Namen der <INPUT>-Felder. Sie müssen an die tatsächlichen Namen des betreffenden HTML-Formulars angepasst werden (auch das 'id'-Tag muss gesetzt sein!).
Unterstützung weiterer Länder
Der Javascript-Funktion "ziptocity" kann optional ein dritter Parameter 'countrycode' mitgegeben werden (default: "de"). Beispiel:
<form name="register">
<script src="ziptocity/ziptocity.js"></script>
<iframe name="ziptocityframe" src="ziptocity/leer.gif" frameborder="0" height="0" width="0"></iframe>
Land: <input type="text" name="countrycode" id="countrycode" value="de">
Postleitzahl: <input type="text" name="zipcode" id="zipcode" size="5"
onChange="javascript:ziptocity('zipcode','cityname','countrycode')"> <br>
Ort: <input type="text" name="cityname" id="cityname" size="30"><br>
</form>
-
Diese Zeile definiert den Ländercode: <input type="text" name="countrycode"
value="de">
Die OpenGeoDB-Datenbasis unterstützt derzeit "de" (Deutschland), "a" (Österreich) und Schweiz("ch").
Hier sollte stattdessen eine <SELECT>-Listbox angezeigt werden. Ferner müssen die entsprechenden länderspezifischen Datenbasen hinzugefügt werden (siehe Kapitel "Postleitzahlenbasis").
Postleitzahlenbasis
Die Postleitzahlen stammen aus der OpenGeoDB-Datenbasis www.opengeodb.de.
Ein Update ist -wenn überhaupt- nur sehr selten erforderlich, da sich PLZ-Ort-Zuordnungen nicht ändern und jährlich nur sehr geringe neue PLZ-Mengen hinzukommen. Falls ein Nutzer eine solche neue PLZ eingibt, so wird lediglich kein Ort angezeigt, was akzeptabel ist. Soll dennoch ein Update durchgeführt werden, so muß die aktuelle OpenGeoDB-PLZ-Liste per download gespeichert werden und kann durch das Script convert_opengeodb_to_js.vbs in die ca. 850 HTML-Dateien konvertiert werden.
Das Archiv ZIPTOCITY.ZIP enthält nur das Dateiverzeichnis für DE. Falls A und CH benötigt werden, so müssen die Scripts CONVERT_AUSTRIA.BAT und CONVERT_CH.BAT gestartet werden. Daraufhin werden die Verzeichnisse "\webroot\ziptocity\at" und "\webroot\ziptocity\ch" erzeugt.
Falls eine andere Datenbasis eingesetzt werden soll: Das Script convert_zipcodes_to_js.vbs konvertiert eine Input-PLZ/Orte-Datei in die Verzeichnisstruktur mit HTML-Dateien. Die Input-Datei enthält je PLZ eine Zeile im Format PLZ=Ort .
Es gibt ca. 210 mehrdeutige Postleitzahlen (solche, zu denen mehrere Orte aufgeführt sind). Diese werden nicht berücksichtigt (d.h. es wird vorsichtshalber kein Ort angezeigt).