Andreas Bruns

Softwareentwicklung für Oldenburg und Bremen

Kostenlose Karten und Geocoder – welchen Anbieter kann ich nutzen?

Ich habe eine Anfrage erhalten, bestehende Kontaktdaten von Geschäftskunden auf einer Karte innerhalb des Intranets zu visualisieren. Bei den Kartenanbietern können wir zwischen den kostenlosen Karten der kommerziellen Anbieter Google Maps, Yahoo Maps, Bing Maps (Microsoft) und dem freien OpenStreetMap wählen. Jetzt benötigen wir nur noch zu den Adressen der Kontaktdaten die Geo-Koordinaten, damit wir die Kontakte auf einer Karte darstellen können.
Das Auflösen der Adresse zu einer Geo-Koordinate wird als Geocoding bezeichnet, während der umgekehrte Weg, aus einer Koordinate die Adresse zu ermitteln, Reverse-Geocoding genannt wird. Die kommerziellen Kartenanbieter bieten entsprechende Geocoder an und es gibt auch noch weitere kostenlose Geocoder-Dienstleister. Beim Einsatz von Karten und Geocodern muss man einige Punkte abwägen, denn kostenlose Nutzung von Diensten heißt keinesfalls freie Nutzung der Dienste!

Dann überlegen wir jetzt mal, welche Anforderungen wir haben und was wir beachten müssen:

  • die Karte mit den Kontaktdaten der Geschäftskunden soll nur im Intranet (keinesfalls im Internet) einsehbar sein
  • personenbezogene Daten dürfen nicht an andere Unternehmen übermittelt werden (Datenschutzrecht)
  • das Geocoding nur auf Basis der Adressdaten durchführen (ohne personenbezogene Daten)
  • lässt die Lizenz des Kartenanbieters und des Geocoders eine kommerzielle Nutzung zu?
  • maximale Zugriffe, Auflösung, Performanz des Kartenanbieters
  • maximale Zugriffe, Auflösung, Performanz des Geocoders


Mit diesen Punkten im Kopf widmen wir uns erst einmal den Kartenanbietern. Die kommerziellen Kartenanbieter Google, Yahoo und Microsoft verfolgen natürlich kommerzielle Interessen und deren Dienste darf man nicht einfach nutzen, wie es einem gefällt. Am Beispiel von Google Maps habe ich geprüft, welche Nutzungsbedingung eines kommerziellen Anbieters in unserem Fall einschränkend wirkt. Auf der FAQ-Seite von Google heißt es unter kommerzielle Nutzung:

Kann ich das Google Maps-API auf einer kommerziellen Website verwenden?

Solange Ihre Website für Kunden allgemein kostenlos zugänglich ist, dürfen Sie das Google Maps-API verwenden. […] Es ist jedoch nicht jede kommerzielle Verwendung zulässig. Falls Ihre Website zum Beispiel eines der folgenden Kriterien erfüllt, müssen Sie die entsprechende Google Maps API Premier-Lizenz erwerben:

  • […] Ihre Website ist nur innerhalb Ihres Unternehmens oder in Ihrem Intranet verfügbar. […]

Damit scheidet die Verwendung von Google Maps in unserem Fall aus und ich gehe davon aus, dass die Nutzungsbedingungen von Yahoo und Microsoft ähnlich sind. Es bleibt uns aber wenigstens das freie OpenStreetMap als kostenlose Alternative. Egal für welchen Anbieter man sich entscheidet, die Karten müssen sowohl bei den kommerziellen Anbietern als auch bei OpenStreetMap mit einem Hinweis über die Kartenherkunft versehen werden.

Dann schauen wir uns jetzt mal die Geocoder an – einen guten Überblick bietet diese Liste: Geocoders. Für mich sind erstmal die Anbieter interessant, die sich nicht auf die USA beschränken, die eine API anbieten, die mehr als 1000 Anfragen pro Stunde verarbeiten, kostenlos sind und überhaupt noch existieren. Das sind dann nicht mehr so viele Anbieter. Es stellt sich sowieso die Frage, warum können andere Anbieter 5000 Anfragen für 230$ anbieten (wie Tele Atlas), wenn es kostenlose Geocoder gibt?

Von den aufgelisteten Geocodern habe ich die beiden kommerziellen Anbieter Yahoo und Google und den „Free Geocoding Webservice“ Geonames.org ausprobiert. Sie bieten unterschiedliche Genauigkeit, Anzahl von Abfragen und Nutzungsbedingungen.

  • Genauigkeit: die beiden kommerziellen Anbieter liefern sehr präzise Geo-Positionen bei einer vollständigen Adresse (Ort, Postleitzahl, Straße und Hausnummer), während Geonames lediglich Ortsname und Postleitzahl (keine Straße und Hausnummer) auswertet und damit auch nicht so präzise sein kann
  • Anzahl von Abfragen:
    – Google: 2500 Anfragen/Tag (Google Geocooding API – Grenzen der Verwendung)
    – Yahoo: 50000 Anfragen/Tag (Yahoo! PlaceFinder – Rate Limits)
    – Geonames: 2000 Anfragen/Stunde, 30000 Anfragen/Tag (Geonames Data – Terms and Condition)
    Man darf die Zahlen allerdings nicht direkt miteinander vergleichen, da Yahoo und Geonames die Anfragen an einem API-Key bzw. Username identifizieren, während Google dafür die IP-Adresse nutzt. Bei Google muss man daher zwischen clientseitigem (IP-Adresse des Besuchers) und serverseitigem (IP-Adresse des Webservers) Geocoding unterscheiden. Google empfiehlt für serverseitiges Geocoding das Cachen der Antworten (Google Maps API Familiy – Geococing Strategien).
  • Nutzungsbedingungen: Während die Daten von Geonames unter einer CC-Lizenz (Creative Commons) stehen, dürfen die Daten des kommerziellen Anbieters Googles nur in Verbindung mit einer Google-Karte genutzt werden (Google Geocooding API – Grenzen der Verwendung). Das bedeutet: keine Google-Karte = kein Google-Geocoding (bei meinem OpenStreetMap-Location Picker werde ich mal lieber noch eine Google-Karte hinzufügen, weil ich dort serverseitig den Geocoder von Google nutze).

Google: URL und Ergebnis

http://maps.googleapis.com/maps/api/geocode/json?address=Am+Dom+2,+28195+Bremen,+DE&sensor=true
{
    "results": [{
        "address_components": [{
            "long_name": "2",
            "short_name": "2",
            "types": ["street_number"]
        }, {
            "long_name": "Am Dom",
            "short_name": "Am Dom",
            "types": ["route"]
        }, {
            "long_name": "Altstadt",
            "short_name": "Altstadt",
            "types": ["sublocality", "political"]
        }, {
            "long_name": "Mitte",
            "short_name": "Mitte",
            "types": ["sublocality", "political"]
        }, {
            "long_name": "Bremen",
            "short_name": "Bremen",
            "types": ["locality", "political"]
        }, {
            "long_name": "Bremen",
            "short_name": "HB",
            "types": ["administrative_area_level_1", "political"]
        }, {
            "long_name": "Deutschland",
            "short_name": "DE",
            "types": ["country", "political"]
        }, {
            "long_name": "28195",
            "short_name": "28195",
            "types": ["postal_code"]
        }],
        "formatted_address": "Am Dom 2, 28195 Bremen, Deutschland",
        "geometry": {
            "location": {
                "lat": 53.075480,
                "lng": 8.808710
            },
            "location_type": "ROOFTOP",
            "viewport": {
                "northeast": {
                    "lat": 53.07682898029150,
                    "lng": 8.810058980291503
                },
                "southwest": {
                    "lat": 53.07413101970850,
                    "lng": 8.807361019708498
                }
            }
        },
        "partial_match": true,
        "types": ["street_address"]
    }],
    "status": "OK"
}

Yahoo: URL und Ergebnis

http://where.yahooapis.com/geocode?line1=Am+Dom+2&line2=28195+Bremen,+DE&flags=J&appid=yourappid
{
    "ResultSet": {
        "version": "1.0",
        "Error": 0,
        "ErrorMessage": "No error",
        "Locale": "us_US",
        "Quality": 87,
        "Found": 1,
        "Results": [{
            "quality": 87,
            "latitude": "53.075394",
            "longitude": "8.808235",
            "offsetlat": "53.075459",
            "offsetlon": "8.808416",
            "radius": 500,
            "name": "",
            "line1": "Am Dom 2",
            "line2": "28195 Bremen",
            "line3": "",
            "line4": "Germany",
            "house": "2",
            "street": "Am Dom",
            "xstreet": "",
            "unittype": "",
            "unit": "",
            "postal": "28195",
            "neighborhood": "Mitte",
            "city": "Bremen",
            "county": "Bremen",
            "state": "Bremen",
            "country": "Germany",
            "countrycode": "DE",
            "statecode": "HB",
            "countycode": "HB",
            "uzip": "28195",
            "hash": "C2C5A2200446439C",
            "woeid": 12833276,
            "woetype": 11
        }]
    }
}

Geonames: URL und Ergebnis

http://api.geonames.org/postalCodeSearchJSON?postalcode=28195&placename=Bremen&country=de&username=demo
{
    "postalCodes": [{
        "adminCode3": "04011",
        "adminName3": "Bremen, Stadt",
        "adminCode2": "00",
        "adminCode1": "HB",
        "postalCode": "28195",
        "countryCode": "DE",
        "lng": 8.79062727272727,
        "placeName": "Bremen",
        "lat": 53.0889090909091,
        "adminName1": "Bremen"
    }]
}

Bei der Anfrage bezüglich „Kontaktdaten von Geschäftskunden auf einer Karte zu visualisieren“ scheiden die kommerziellen Kartenanbieter aus und damit auch deren Geocoder (ich verallgemeinere mal die Google-Nutzungsbedingungen und nehme ähnliche Bedingungen bei Bing und Yahoo an). Für meine Anforderungen ist OpenStreetMap ein guter Kartenanbieter und der Geonames-Geocoder bietet auch ausreichende Genauigkeit. Für weitergehende Anforderungen sollte man einen kostenpflichtigen Premium-Account bei Google, Yahoo oder Microsoft oder einen kostenpflichtigen Geocoder-Anbieter in Betracht ziehen. Damit profitiert man auch von einem erhöhten Service Level.

Als Alternative zu einer Webseite im Intranet, die nicht den Nutzungsbedingungen von kommerziellen Kartenanbietern entspricht, bietet sich eventuell der Einsatz eines Desktop-Programmes (wie Google Earth) an. Manche Geocoding-Anbieter, wie batchgeo und Topo.ly, haben sich  auf die Verarbeitung von Excel-Tabellen spezialisiert. Aus den festgelegten Excel-Spalten für die Adresse wird für jeden Datensatz die Geo-Koordinate ermittelt und anschließend beispielsweise auf einer Karte dargestellt.

Es gibt also  viele Möglichkeiten im Bereich der Karten- und Geocoder-Services. Trotzdem bitte immer an den Datenschutz denken: keine personenbezogene Daten ohne die Einwilligung Betroffener an andere Unternehmen übermitteln !!!

Kommentare sind geschlossen.