2010-09-03 19 views
17

Czy istnieje prosty sposób uzyskania nazwy kraju, na którego terytorium znajduje się dany punkt?Nazwa kraju dla współrzędnych GPS

Nie zależy mi zbytnio na dokładności ani na niejasnościach wynikających z politycznych sporów. Wystarczy dostatecznie dobre przybliżenie.

+1

Czy chcesz to zrobić za pomocą usługi online lub offline? Z którą platformą/językiem programowania chcesz uzyskać odpowiedź? – hippietrail

Odpowiedz

6

EDYCJA: Interfejs API Yahoo Where nie jest już dostępny.

Wypróbuj usługę Yahoo! APIs.

szerokości i długości geograficznej

Szerokość i długość geograficzna może być określona dla parametru lokalizacji. Szerokość geograficzna i długość geograficzna może być wyrażona jako dziesiętna stopni lub stopni-minut-sekund, z wiodącymi lub końcowymi kierunkami lub znakami wiodącymi. Jeśli podano kierunki , długość geograficzna może pojawić się przed szerokością geograficzną. Jeśli nie podano kierunków , długość geograficzna może pojawić się przed szerokością geograficzną , jeśli znajduje się poza zakresem -90 do 90. W przeciwnym razie szerokość geograficzna musi najpierw pojawić się jako . Znaki interpunkcyjne (przecinki, stopni, minuty, sekundy) są ignorowane .

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 

Element odpowiedź daje ten kraj, jak również wiele innych elements.

Nie zapomnij wysłać jako parametru gflags = R, aby cofnąć geokodowanie. Jeśli chcesz uzyskać wyjście w jsonie, wyślij również flagi parametrów = J.

+0

Yahoo! geocode location API nie dostarcza żadnych informacji dla kilku próśb, które wypróbowałem, dla lokalizacji, która nie jest trudna do wyszukania (nic w środku lub w oceanie lub czymś), więc byłbym bardzo ostrożny, gdy w zależności od tego. – Guss

+0

Czy znasz ograniczenia API? –

+1

@Felipe - 50 000 żądania/dzień w [Finderze miejsca] (http://developer.yahoo.com/geo/placefinder/). – GalacticJello

5

Co powiesz na korzystanie z usługi google's reverse geo-encoding?

+1

Problem polega na tym, że: Korzystanie z interfejsu API Google Geocoding podlega limitowi zapytań wynoszącemu 2500 żądań geolokalizacji dziennie. (Użytkownik Google Maps API for Business może wykonywać do 100 000 zgłoszeń dziennie.) (...) Uwaga: interfejs API geokodującego może być używany tylko w połączeniu z mapą Google; wyniki geokodowania bez wyświetlania ich na mapie są zabronione. Aby uzyskać szczegółowe informacje na temat dozwolonego użycia, zapoznaj się z ograniczeniami licencji Warunków korzystania z interfejsu API Map Google. –

5

Dla odniesienia, geonames.org ma również ładny serwis internetowy, ale jego stawka jest ograniczona (co było problemem w moim przypadku, ponieważ musiałem wyszukać dużą partię współrzędnych).

Przykład: http://ws.geonames.org/findNearbyPlaceName?lat=47.3&lng=9

+0

To mnie uratowało, dzięki! Potrzebujesz nazwy użytkownika, aby działała, a 'felix' i' nico' działają poprawnie. (Dla innych osób:) masz limit 2000 na godzinę, więc używaj ich mądrze – Nico

0

Można również spojrzeć na usługi z tinygeocoder.

Inną opcją jest pobranie map kraju z naturalnej ziemi (lub innego źródła). Używając Geotools możesz wyszukać, czy punkt znajduje się w jednym z krajów.

1

Oto niektóre kodu JavaScript, żeby uzyskać nazwę kraju od szerokości i długości geograficznej:


  1. Korzystanie z usług geokodowania Google [jsfiddle]:

    var lookupCountryWithGoogle = function (lat, lng) { var latlng = new 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); // uda się lookupCountryWithGoogle (142, 124); // zawiedzie

(Musisz załadować obsługę JavaScript Google'a za to z adresu URL, takich jak maps.google.com/maps/api/js?sensor=false&fake=.js)


  1. Korzystanie ws.geonames.org[jsfiddle]:

    var lookupCountryWithGeonames = funkcja (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); 
        } 
    }); 
    

    };

    lookupCountryWithGeonames (43.7534932, 28.5743187); // powiedzie się

    lookupCountryWithGeonames (142, 124); // zawiedzie

Powiązane problemy