2010-09-03 8 views
17

Gibt es eine einfache Möglichkeit, den Namen des Landes zu erhalten, auf dessen Gebiet sich ein bestimmter Punkt befindet?Ländername für GPS-Koordinaten

Ich interessiere mich nicht allzu sehr für Genauigkeit und Unklarheiten, die durch politische Auseinandersetzungen entstehen. Ich brauche nur eine gute Annäherung.

+1

Möchten Sie dies über einen Onlinedienst oder auch offline tun? Auf welche Plattform/Programmiersprache soll die Antwort bezogen werden? – hippietrail

Antwort

6

EDIT: Die Yahoo Where API ist nicht mehr verfügbar.

Probieren Sie die Yahoo! APIs.

Breite und Länge

Latitude und Länge für die Lageparameter festgelegt werden. Breitengrad und Längengrad kann als Dezimal Grad oder Grad-Minuten-Sekunden, entweder mit führenden oder nachlaufenden Richtungen oder Vorzeichen ausgedrückt werden. Wenn Direktionen angegeben sind, kann die Länge vor dem Breitengrad angezeigt werden. Wenn Richtungsangaben nicht angegeben sind, kann Längengrad vor dem Breitengrad angezeigt werden, wenn er außerhalb des Bereichs -90 bis 90 liegt. Andernfalls muss der Breitengrad zuerst angezeigt werden. Interpunktionszeichen (Kommas, Grad, Minuten, Sekunden) werden ignoriert.

Examples: 

•50.3 -120.5 
•50.3, -120.5 
•-120.5 50.3 
•50.3 N 120.5 W 
•120.5 W 50.3 N 
•50 18 0 -120 30 0 
•50 18 0 N 120 30 0 W 
•50° 18' 0" N 120° 30' 0" W 

Das Response-Element Sie das Land geben, wie auch viele andere elements.

Vergessen Sie nicht, als Parameter gflags = R zu senden, um die umgekehrte Geokodierung durchzuführen. Wenn Sie die Ausgabe in json wünschen, senden Sie auch den Parameter flags = J.

+0

Die Yahoo! Geokodierungs-Standort-API liefert keine Informationen für mehrere Anfragen, die ich ausprobiert habe, für Orte, die nicht so schwer zu finden sind (nichts in der Mitte oder der Ozean oder so), also wäre ich sehr vorsichtig, wenn ich davon abhängig bin. – Guss

+0

Kennen Sie die API-Grenzen? –

+1

@Felipe - 50.000 Anfrage/Tag auf [PlaceFinder] (http://developer.yahoo.com/geo/placefinder/). – GalacticJello

5

Wie wäre es mit google's reverse geo-encoding Service?

+1

Das Problem dabei ist: Die Verwendung der Google Geocoding API unterliegt einem Abfrage-Limit von 2.500 Geolocation-Anfragen pro Tag. (Der Nutzer von Google Maps API for Business kann bis zu 100.000 Anfragen pro Tag durchführen.) ( ) Hinweis: Die Geocodierungs-API darf nur in Verbindung mit einer Google-Karte verwendet werden. Geocoding-Ergebnisse, ohne sie auf einer Karte anzuzeigen, sind verboten. Ausführliche Informationen zur zulässigen Verwendung finden Sie in den Lizenzbedingungen für Google Maps API-Nutzungsbedingungen. –

5

Nur für die Referenz, geonames.org hat auch einen netten Webservice, aber es ist Rate begrenzt (was ein Problem in meinem Fall war, da ich eine große Menge von Koordinaten nachschlagen musste).

Beispiel: http://ws.geonames.org/findNearbyPlaceName?lat=47.3&lng=9

+0

Das hat mich gerettet, danke! Sie benötigen einen Benutzernamen, damit es funktioniert, und 'felix' und' nico' funktionieren gut. (Für andere Leute:) Sie haben eine Grenze von 2000 pro Stunde, also verwenden Sie sie mit Bedacht – Nico

0

Sie auch auf die Dienste von tinygeocoder aussehen könnte.

Eine andere Alternative ist, die Landkarten von der natürlichen Erde (oder einer anderen Quelle) herunterzuladen. Mit Geotools können Sie suchen, ob der Punkt in einem der Länder liegt.

1

Hier einig JavaScript-Code, den Namen des Landes von Breiten- und Längengrad erhalten Koordinaten:


  1. Mit Google Geocoding Service [jsfiddle]:

    var lookupCountryWithGoogle = function (lat, lng) { var latlng = neue google.maps.LatLng (lat, lng);

    var geoCoder = new google.maps.Geocoder(); 
    
    geoCoder.geocode({ 
        location: latlng 
    }, function(results, statusCode) { 
        var lastResult = results.slice(-1)[0]; 
    
        if (statusCode == 'OK' && lastResult && 'address_components' in lastResult) { 
         alert('coordinates: ' + lat + ', ' + lng + '\n' + 'country: ' + lastResult.address_components.slice(-1)[0].long_name); 
        } else { 
         alert('coordinates: ' + lat + ', ' + lng + '\n' + 'failed: ' + statusCode); 
        } 
    }); 
    

    };

    lookupCountryWithGoogle (43.7534932, 28.5743187); // wird erfolgreich sein lookupCountryWithGoogle (142, 124); // fehl


  1. Mit ws.geonames.org[jsfiddle] (Sie werden Googles JavaScript-Unterstützung für diese von einer URL wie maps.google.com/maps/api/js?sensor=false&fake=.js laden müssen):

    var lookupCountryWithGeonames = Funktion (lat, lng) {

    $.getJSON('http://ws.geonames.org/countryCode', { 
        lat: lat, 
        lng: lng, 
        type: 'JSON' 
    }, function(results) { 
        if (results.countryCode) { 
         alert('coordinates: ' + lat + ', ' + lng + '\n' + 'country: ' + results.countryName); 
        } else { 
         alert('coordinates: ' + lat + ', ' + lng + '\n' + 'failed: ' + results.status.value + ' ' + results.status.message); 
        } 
    }); 
    

    };

    SucheCountryWithGeonames (43.7534932, 28.5743187); // wird erfolgreich sein

    lookupCountryWithGeonames (142, 124); // wird fehlschlagen

Verwandte Themen