Wie konvertiere ich eine Adresse in einen Breiten- / Längengrad?

70

Wie würde ich eine Adresse oder Stadt in einen Breiten- / Längengrad umwandeln? Gibt es kommerzielle Outfits, bei denen ich diesen Service "mieten" kann? Dies wird in einer kommerziellen Desktop-Anwendung auf einem Windows-PC mit Vollzeit-Internetzugang verwendet.

swilc0x
quelle
1
scheint ein Dup von stackoverflow.com/questions/158474/… zu sein
Guillaume
5
Christian: Das Latitude- Tag ist richtig geschrieben. Siehe: en.wikipedia.org/wiki/Latitude
Paul McMillan

Antworten:

49

Google verfügt über eine Geokodierungs-API, die für die meisten Standorte, für die Google Maps-Daten verfügbar sind, recht gut zu funktionieren scheint.

http://googlemapsapi.blogspot.com/2006/06/geocoding-at-last.html

Sie bieten Online-Geokodierung (über JavaScript):

http://code.google.com/apis/maps/documentation/services.html#Geocoding

Oder Backend-Geokodierung (über eine HTTP-Anfrage):

http://code.google.com/apis/maps/documentation/services.html#Geocoding_Direct

Die Daten werden normalerweise von Google Maps selbst verwendet. (Beachten Sie, dass es einige Ausnahmen gibt, z. B. in Großbritannien oder Israel, wo die Daten aus einer anderen Quelle stammen und von leicht reduzierter Qualität sind.)

Mopoke
quelle
24
Beachten Sie Folgendes in den häufig gestellten Fragen zu Google Maps: "... und beachten Sie, dass die Verwendung des Geocoders für andere Zwecke als zum Abrufen von Standorten, die mithilfe der Google Maps-APIs angezeigt werden, einen Verstoß gegen die Nutzungsbedingungen darstellt."
Dewayne Christensen
25

Es gibt nicht viel Neues hinzuzufügen, aber ich habe viel Erfahrung in der Praxis in GIS und Geokodierung von einem früheren Job. Folgendes erinnere ich mich:

Wenn Ihre Anwendung "von Zeit zu Zeit" benötigt wird, würde ich auf jeden Fall die Geocodierungs-APIs von Google oder Yahoo empfehlen. Lesen Sie jedoch deren Lizenzbedingungen sorgfältig durch.

Ich weiß, dass die Google Maps-API im Allgemeinen auch für kommerzielle Webseiten leicht zu lizenzieren ist, aber in einer Pay-to-Access-Situation nicht verwendet werden kann. Mit anderen Worten, Sie können damit einen Dienst bewerben oder bereitstellen, der die Werbeeinnahmen steigert. Sie können jedoch keine Gebühren für den Zugriff auf Ihre Website erheben oder diese sogar hinter ein Kennwortsystem stellen.

Trotz dieser Einschränkungen sind beide eine ausgezeichnete Wahl, da sie ihre Straßendatenbanken häufig aktualisieren. Die meisten kostenlosen Backend-Tools und -Bibliotheken verwenden Census- und TIGER-Straßendaten, die nur selten aktualisiert werden. Daher ist es weniger wahrscheinlich, dass Sie Adressen in schnell wachsenden Gebieten oder neuen Unterteilungen erfolgreich geocodieren.

Die meisten Dienste beschränken auch die Anzahl der Geokodierungsabfragen, die Sie pro Tag durchführen können. Daher ist es in Ordnung, Adressen von beispielsweise Neukunden nachzuschlagen, die Ihrer Datenbank hinzugefügt werden. Wenn Sie jedoch einen Stapeljob ausführen, von dem Tausende von Adressen gespeist werden Wenn Sie Ihre Datenbank in den Geocoder einbinden, werden Sie abgeschaltet.

Ich glaube, dieser wurde noch nicht erwähnt, aber ESRI verfügt über ArcWeb-Webdienste , die Geokodierung enthalten, obwohl diese nicht sehr billig sind. Das letzte Mal, als ich sie benutzte, kostete es ungefähr 1,5 Cent pro Suche, aber Sie mussten einen bestimmten Betrag im Voraus bezahlen, um loszulegen. Der Hauptvorteil ist wiederum, dass die von ihnen verwendeten Straßendaten zeitnah auf dem neuesten Stand gehalten werden und Sie die Daten in kommerziellen Situationen verwenden können, die Google nicht zulässt. Der ArcWeb Dienst wird auch dazu dienen , hochauflösende Satelliten- und Luftbilder bis à la Google Maps, wieder pro Anfrage festgesetzt.

Wenn Sie Ihre eigenen Daten erstellen oder Zugriff auf viel genauere Daten haben möchten, können Sie Abonnements für GIS-Daten von Unternehmen wie TeleAtlas erwerben , aber das ist nicht billig. Sie können nur Daten im Wert eines Bundesstaates oder Landkreises kaufen, wenn Ihre Anforderungen extrem lokal sind. Es gibt mehrere Datenebenen - nur GIS-Funktionen, GIS plus detaillierte Straßen, all das plus Geocodedaten, all das plus Verkehrsfluss- / Richtungs- / Geschwindigkeitsbegrenzungen für das Routing. Natürlich steigt der Preis, wenn Sie die Stufen hinaufsteigen.

Schließlich enthält der Wikipedia-Artikel über Geokodierung einige gute Informationen zu den Algorithmen und Techniken. Auch wenn Sie dies nicht in Ihrem eigenen Code tun, ist es hilfreich zu wissen, welche Art von Fehlern und Genauigkeit Sie von verschiedenen Arten von Datenquellen erwarten können.

CMPalmer
quelle
5

Nachdem ich zuvor meine eigene Lösung dafür entwickelt habe, kann ich das Geo :: Coder :: US Perl-Modul von ganzem Herzen empfehlen . Laden Sie einfach alle Volkszählungsdaten herunter und erstellen Sie mit dem mitgelieferten Importer die Berkeley-Datenbank für Ihr Land. Zeigen Sie mit dem Perl-Skript darauf. Verwenden Sie die integrierte Adressanalyse des Moduls, und schon haben Sie es: Ein Offline-Geokodierungssystem!

willasaywhat
quelle
5

Wenn Sie eine Adresse oder ein Objekt in ein Lat / Long konvertieren, wird dies als Geokodierung bezeichnet.

Es gibt viele Geokodierungslösungen. Das Lösungsrecht für Ihr Projekt hängt von der Akzeptanz der Lizenzbedingungen für jede Geokodierungslösung ab. Sowohl Microsoft Virtual Earth als auch Google Maps bieten Lösungen an, die unter sehr restriktiven Lizenzen kostenlos verwendet werden können ...

https://developers.google.com/maps/documentation/javascript/tutorial

Ofer Zelig
quelle
4

Versuchen Sie es mit diesem Code, ich arbeite so mit Adressen:

Es ist ein Link, in dem Sie mit der GET-Methode eine Anfrage senden und lat und lng erhalten. http://maps.google.com/maps/api/geocode/json?address=YOUR ADDRES & sensor = false

Zum Beispiel: http://maps.google.com/maps/api/geocode/json?address=W Main Street, Bergenfield, NJ 07621 & sensor = false

1. Erstellen Sie Ihre GET-Methode.

 public static String GET(String url) throws Exception {//GET Method
        String result = null;
        InputStream inputStream = null;
        try {
            HttpClient httpclient = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(url);

        Log.v("ExecuteGET: ", httpGet.getRequestLine().toString());

        HttpResponse httpResponse = httpclient.execute(httpGet);
        inputStream = httpResponse.getEntity().getContent();
        if (inputStream != null) {
            result = convertInputStreamToString(inputStream);
            Log.v("Result: ", "result\n" + result);
        } 
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
}

2. Erstellen Sie eine Methode für die Sendeanforderung

@SuppressWarnings("deprecation")
    public static String getLatLng(String accessToken) throws Exception{
        String query=StaticString.gLobalGoogleUrl+"json?address="+URLEncoder.encode(accessToken)+"&sensor=false";
        Log.v("GETGoogleGeocoder", query+"");
        return GET(query);
    }

gLobalGoogleUrl = "http://maps.google.com/maps/api/geocode/"

3. Rufen Sie die Methode getLatLng auf

String result=getLatLng("W Main St, Bergenfield, NJ 07621");

4. Analysieren Sie JSONObject

Das Ergebnis ist jetzt JSONObject mit Informationen zu Adresse und Sprache. Analysieren Sie JSONObject (Ergebnis) mit gson () . Verwenden Sie danach lat, lng.

Wenn Sie Fragen zum Code haben, fragen Sie.

MilanNz
quelle
1
Das scheint zu funktionieren. Was sind die Abfragegrenzen und was macht sensor=falsedas?
Bindestrich
Der Sensorparameter gibt an, ob das anrufende Gerät über einen GPS-Sensor verfügt. developer.google.com/maps/documentation/geocoding/intro#Sensor
Rich C
Gibt es eine Abfragegrenze dafür?
Priyansh Agrawal
2

Sie möchten eine Geokodierungsanwendung. Diese sind entweder online oder als Anwendungs-Backend verfügbar.

Christopher Currie
quelle
2

Mit Maptsraction ( http://www.mapstraction.com ) können Sie zwischen einer beliebigen Anzahl von Geokodierungsdiensten wählen. Dies kann hilfreich sein, wenn Sie große Mengen ausführen müssen, da ich weiß, dass Google nur eine begrenzte Anzahl von Aufgaben pro Tag ausführen kann.

ian93
quelle
2

Sie können auch den OpenStreetMap NameFinder (oder den aktuellen Nominatim ) ausprobieren , der Open-Source-Wiki-ähnliche Straßendaten für (möglicherweise) die ganze Welt enthält.

peSHIr
quelle
Name Finder scheint im Ruhestand zu sein, aber Nominatim sieht aus wie ein tolles Werkzeug :)
Jasalguero
1

Sie können Bing-Maps-Seifendienste verwenden, bei denen Sie auf den Reverse-Geocode-Dienst verweisen können, um Lat / Long von der Adresse hier zu finden. Dies ist der Link http://msdn.microsoft.com/en-us/library/cc980922.aspx

Blazen
quelle
0

Sie können die MapPoint-Webdienste von Microsoft verwenden.

Ich habe einen Blogeintrag zum Konvertieren einer Adresse in einen GeoCode (lat / long) erstellt.

Stephen Curial
quelle
Die MapPoint-API wird am 18. November eingestellt. msdn.microsoft.com/en-us/library/cc514493.aspx
tsilb
0

Ich dachte, ich würde noch einen zur Liste hinzufügen. Texas A & M bietet hier einen recht günstigen Service: http://geoservices.tamu.edu/Services/Geocode/

Eine gute Option, wenn Sie einen ziemlich großen Satz von Adressen zum Geocodieren haben und keine 10.000 an Google oder Microsoft senden möchten. Wir haben die zurückgegebenen Daten immer noch in einer Google Map verwendet.

ficuscr
quelle
0

Sie fragen nach Geocoder. Google stellt hierfür eine API zur Verfügung. Dies gilt auch für einen anderen Anbieter.

Sie können die Demo der Implementierung in My Current Location .net sehen

Toni Tegar Sahidi
quelle
-1

Der USC WebGIS Geocoder ist kostenlos und bietet mehrere APIs. Sie können auch eine Datenbank für die Online-Stapelverarbeitung hochladen.


quelle
-1

Wenn Sie eine einmalige Lösung benötigen, können Sie Folgendes versuchen: https://addresstolatlong.com/

Ich habe es für eine lange Zeit benutzt und es hat ziemlich gut für mich funktioniert.

Ashish Anand
quelle
Ist dies Ihre (oder jemand, den Sie kennen) Website? das sieht sehr faul aus. Es gibt auch keine API
vsync
ungesicherte Website
Lester