Есть ли простой способ получить название страны, на территории которой находится данный пункт?
Меня не волнует слишком много о точности или о двусмысленности, обусловленной политическими спорами. Просто нужно хорошее приближение.
Есть ли простой способ получить название страны, на территории которой находится данный пункт?
Меня не волнует слишком много о точности или о двусмысленности, обусловленной политическими спорами. Просто нужно хорошее приближение.
EDIT: API Yahoo Where больше не доступен.
Попробуйте Yahoo! API.
Широта и долгота
Широта и долгота может быть указана для параметр местоположения. Широта и долгота может быть выражена как десятичная градусов или градусов-минут-секунд, с ведущим или конечным направленных или ведущих знаков. Если направленные направления, долгота может появиться перед широтой. Если направленные направления не предусмотрены, долгота может появиться до широты если он находится вне диапазона от -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
Элемент ответа предоставит вам страну, а также многие другие elements.
Не забудьте отправить параметр gflags = R, чтобы сделать обратное геокодирование. Если вы хотите получить результат в json, отправьте флаги параметров = J.
Как насчет использования google reverse geo-encoding сервис?
Просто для справки, geonames.org также имеет приятный веб-сервис, но он ограничен (это было проблемой в моем случае, так как мне приходилось искать большую партию координат).
Пример: http://ws.geonames.org/findNearbyPlaceName?lat=47.3&lng=9
Вот код JavaScript, чтобы получить название страны из координат широты и долготы:
Использование служб геокодирования 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
)
Использование 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);//не удастся
Вы также можете посмотреть службы от tinygeocoder.
Другой вариант - загрузить карты страны с естественной земли (или другого источника). Используя Geotools, вы можете найти, находится ли точка внутри одной из стран.