Geokodierung
BearbeitenGeokodierung - steht für die Zuordnung von geographischen Koordinaten (Längen- und Breitengraden) zu Adressdaten.
Bei der Erstellung von Karten stößt man häufiger auf das Problem, dass man als Quelldaten eine Liste von Ortsangaben hat und diese in einer Karte darstellen möchte. Wenn nun die Quelldatenmenge sehr groß ist, wird ein händisches Georeferenzieren sehr mühsam und es bietet sich eine automatische Geokodierung verschiedener Dienstleister an.
Solche Geokodierungsdienste bieten z. B. Google und Yahoo mit ihren Kartenprodukten als Schnittstelle an. Diese Dienste liefern zwar sehr gute Ergebnisse, haben aber für die Verwendung in der Wikipedia das Problem, dass ihre Nutzungsbedingungen eine solche Nutzung nicht erlauben. Einen frei nutzbaren Geokodierungsdienst gibt es hingegen bei geonames.org
Geonames.org
BearbeitenGeonames.org hat mittlerweile auch für Deutschland umfassende Ortsdaten - leider bislang jedoch keine Straßendaten. Aber für viel Zwecke sollte diese Genauigkeit ausreichen.
So habe ich zB die Karte zu der Verteilung von Windkraftanlagen mit Hilfe von geonames.org erstellt.
Um den Suchdienst von geonames.org zu nutzen gibt es viele Möglichkeiten:
- man kann z. B. über die Webseite selbst direkt nach Orten suchen: Beispiel "Petersberg"
- oder man setzt eine der zahlreichen Programmschnittstellen ein
In den folgenden Beispielen verwende ich die Java-Bibliothek von geonames.org - finde ich persönlich am einfachsten (ist aber Geschmackssache).
Geonames.org - Java-API
BearbeitenAls Einstieg eine ganz einfache Suche nach allen Orten Namens "Petersberg":
ToponymSearchCriteria searchCriteria = new ToponymSearchCriteria();
searchCriteria.setNameEquals("Petersberg");
searchCriteria.setCountryCode("DE");
searchCriteria.setFeatureClass(FeatureClass.P);
searchCriteria.setMaxRows(30);
ToponymSearchResult result = WebService.search(searchCriteria);
for (Toponym toponym : result.getToponyms()) {
System.out.println(toponym.getGeoNameId() + " " + toponym.getName()
+ " ("+toponym.getLatitude()+", "+toponym.getLongitude()+")");
... so erhält man eine Liste:
2854706 Petersberg (50.561868254942, 9.71311569213867) 2854701 Petersberg (51.6, 11.9666667) 2854704 Petersberg (50.9833333, 11.8333333) 2854707 Petersberg (49.2333333, 7.5666667) 2854699 Petersberg (53.8333333, 10.8833333) 2854700 Petersberg (53.6, 11.55) 2854702 Petersberg (51.1166667, 13.2166667) 2854703 Petersberg (51.0333333, 7.2666667) 2854705 Petersberg (50.8666667, 9.7333333) 2854708 Petersberg (48.339285649823, 11.2980222702026)