Jestem zaznajomiony z geolokacją HTML5 w celu zwrócenia przybliżonych współrzędnych położenia użytkownika.Jak mogę znaleźć kraj użytkownika za pomocą geolokacji HTML5?
Jak jednak mogę zwrócić nazwę kraju, w którym znajdują się współrzędne?
Jestem zaznajomiony z geolokacją HTML5 w celu zwrócenia przybliżonych współrzędnych położenia użytkownika.Jak mogę znaleźć kraj użytkownika za pomocą geolokacji HTML5?
Jak jednak mogę zwrócić nazwę kraju, w którym znajdują się współrzędne?
var geocoder = new google.maps.Geocoder();
geocoder.geocode({'latLng': <YOURLATLNGRESPONSEFROMGEO>}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) {
var loc = getCountry(results);
}
}
});
function getCountry(results)
{
for (var i = 0; i < results[0].address_components.length; i++)
{
var shortname = results[0].address_components[i].short_name;
var longname = results[0].address_components[i].long_name;
var type = results[0].address_components[i].types;
if (type.indexOf("country") != -1)
{
if (!isNullOrWhitespace(shortname))
{
return shortname;
}
else
{
return longname;
}
}
}
}
function isNullOrWhitespace(text) {
if (text == null) {
return true;
}
return text.replace(/\s/gi, '').length < 1;
}
To właśnie używam :)
To jest prawie idealne, ale google zwraca "Wielka Brytania" zamiast "Anglia" lub "Szkocja" itp. Idealnie musi wrócić "Anglia" itp. Jako cel aplikacji, którą buduję, polega na zidentyfikowaniu między nimi dwóch! :/ – Curt
Przejrzyj różne typy i zobacz, czy możesz pobrać to, co chcesz. http://code.google.com/apis/maps/documentation/geocoding/#Types – slandau
Po to, aby być super wybrednym, ale bezpieczniej jest używać "===" zamiast "==" do porównywania wartości pustych. –
Będziesz potrzebować usługi Reverse Geocoder.
Jeśli chcesz tylko kraj, tu jest dużo prostsze podejście z wykorzystaniem ws.geonames.org
zamiast Google:
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
$.getJSON('http://ws.geonames.org/countryCode', {
lat: position.coords.latitude,
lng: position.coords.longitude,
type: 'JSON'
}, function(result) {
alert(result.countryName);
});
});
}
Normalnie powiedziałbym, że za pomocą Usługa Google oznaczałaby większą niezawodność, ale w przypadku tak wielu usług Google wycofywanych w ostatnim czasie prawdopodobnie warto przyjrzeć się innym rozwiązaniom.
Tak przy okazji, przeprowadziłem eksperymenty, korzystając ze wszystkich bezpłatnych usług geokodowania, jakie mogłem znaleźć. Zwraca kraj i nazwę odpowiedzialnej służby, gdy tylko jeden z nich znajdzie akceptowalny wynik.
Zapraszam do zabawy z nim poprzez JSFiddle: Deferred look up country code via multiple geolocation webapis
Bardzo podoba mi się prostota tej odpowiedzi ... i jej bardziej otwarta odpowiedź;) – Pykler
Najlepsza odpowiedź dla krajów, które blokują Google :) – Armfoot
Błąd: dzierżawa Dodaj nazwę użytkownika do każdego połączenia, aby geony mogły identyfikować aplikacja wywołująca i liczyć kredyty – zloctb
Podobne odpowiedź jak z @hippietrail ale z innej usługi bez rejestracji.
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
$.ajax('http://www.datasciencetoolkit.org/coordinates2politics/'
+ position.coords.latitude + ','
+ position.coords.longitude, {dataType: 'jsonp'})
.done(function(data, textStatus, jqXHR) {
if (textStatus === 'success') {
var country = data[0].politics[0].name
alert(country)
}
})
}
zwracać uwagę, czego potrzebujesz ustawić „username” nieruchomości na użyciu tego API, inaczej dostaniesz błąd.
setTimeout(function() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
$.getJSON('http://api.geonames.org/countryCode', {
lat : position.coords.latitude,
lng : position.coords.longitude,
type : 'JSON',
username : 'demo'
}, function(result) {
alert(result.countryName);
});
});
}
}, 1000);
Jeśli masz problem z uzyskaniem geolokalizacja pracować jak miałem w Chrome, wtedy mogę polecić ten alternatywny sposób (przykład z jQuery):
$.getJSON("https://freegeoip.net/json/", function(data) {
const countryCode = data.country_code;
const countryName = data.country_name;
const ip = data.ip;
const timezone = data.time_zone;
const latitude = data.latitude;
const longitude = data.longitude;
alert("Country Code: " + countryCode);
alert("Country Name: " + countryName);
alert("IP: " + ip);
alert("Time Zone: " + timezone);
alert("Latitude: " + latitude);
alert("Longitude: " + longitude);
});
schludne rozwiązanie z bardzo kilka linii! również nie wymaga interakcji użytkownika, aby znaleźć swoją lokalizację. – Ander
zduplikowane pytanie? http://stackoverflow.com/questions/6159074/given-the-lat-long-coordinates-how-can-we-find-out-the-city-country – Kevin
Zobacz prawdopodobnie odpowiedzi na http://stackoverflow.com/questions/4497728/get-country-from-równoleżnik. –
Geolokalizacja nie jest częścią HTML5: http://isgeolocationpartofhtml5.com/ –