Название страны для координат GPS - PullRequest
18 голосов
/ 03 сентября 2010

Есть ли простой способ узнать название страны, на территории которой находится данный пункт?

Меня не слишком заботит ни точность, ни неопределенность политических споров. Просто нужно достаточно хорошее приближение.

Ответы [ 5 ]

6 голосов
/ 03 сентября 2010

РЕДАКТИРОВАТЬ: API Yahoo Где больше не доступен.

Попробуйте Yahoo! APIs .

Широта и долгота

Широта и долгота может быть указана для параметр местоположения. Широта и долгота может быть выражена в десятичном виде градусы или градусы-минуты-секунды, с лидирующим или трейлингом Направляющие или ведущие знаки. Если Направления предоставляются, долгота может появиться до широты. Если направления не предоставляются, долгота может появиться перед широтой если это вне диапазона от -90 до 90. В противном случае широта должна появиться первый. Знаки пунктуации (запятые, градусы, минуты, секунды) игнорироваться.

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

Элемент ответа предоставит вам страну, а также множество других элементов .

Не забудьте отправить в качестве параметра gflags = R, чтобы сделать обратное геокодирование. Если вы хотите получить вывод в формате json, отправьте также параметр flags = J.

5 голосов
/ 08 сентября 2010

Просто для справки, у geonames.org также есть хороший веб-сервис, но он ограничен по скорости (что было проблемой в моем случае, так как мне пришлось искать большую группу координат).

Пример: http://ws.geonames.org/findNearbyPlaceName?lat=47.3&lng=9

5 голосов
/ 03 сентября 2010

Как насчет использования службы обратного геокодирования Google ?

1 голос
/ 06 августа 2012

Вот код JavaScript для получения названия страны по координатам широты и долготы:


  1. Использование сервисов геокодирования 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); // преуспеет lookupCountryWithGoogle (142, 124); // потерпит неудачу

(Вам необходимо загрузить поддержку Google JavaScript для этого с URL-адреса, такого как maps.google.com/maps/api/js?sensor=false&fake=.js)


  1. Использование ws.geonames.org [jsfiddle] :

    var lookupCountryWithGeonames = function (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); // удастся

    lookupCountryWithGeonames (142, 124); // не удастся

0 голосов
/ 24 сентября 2010

Вы также можете посмотреть на сервисы из tinygeocoder.

Еще одна альтернатива - скачать карты стран из естественной земли (или из другого источника).С помощью Geotools вы можете искать, находится ли точка внутри одной из стран.

...