Vous feriez quelque chose comme ça en utilisant l'API de Google.
Veuillez noter que vous devez inclure la bibliothèque google maps pour que cela fonctionne. Le géocodeur de Google renvoie un grand nombre de composants d'adresse, vous devez donc deviner lequel contiendra la ville.
"zone_administrative_niveau_1" est généralement ce que vous recherchez, mais parfois c'est la localité qui vous intéresse.
Quoi qu'il en soit, vous trouverez de plus amples informations sur les types de réponse de Google dans le document suivant ici et ici .
Vous trouverez ci-dessous le code qui devrait faire l'affaire :
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no"/>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Reverse Geocoding</title>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
var geocoder;
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(successFunction, errorFunction);
}
//Get the latitude and the longitude;
function successFunction(position) {
var lat = position.coords.latitude;
var lng = position.coords.longitude;
codeLatLng(lat, lng)
}
function errorFunction(){
alert("Geocoder failed");
}
function initialize() {
geocoder = new google.maps.Geocoder();
}
function codeLatLng(lat, lng) {
var latlng = new google.maps.LatLng(lat, lng);
geocoder.geocode({'latLng': latlng}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
console.log(results)
if (results[1]) {
//formatted address
alert(results[0].formatted_address)
//find country name
for (var i=0; i<results[0].address_components.length; i++) {
for (var b=0;b<results[0].address_components[i].types.length;b++) {
//there are different types that might hold a city admin_area_lvl_1 usually does in come cases looking for sublocality type will be more appropriate
if (results[0].address_components[i].types[b] == "administrative_area_level_1") {
//this is the object you are looking for
city= results[0].address_components[i];
break;
}
}
}
//city data
alert(city.short_name + " " + city.long_name)
} else {
alert("No results found");
}
} else {
alert("Geocoder failed due to: " + status);
}
});
}
</script>
</head>
<body onload="initialize()">
</body>
</html>
4 votes
Si vous n'utilisez pas les cartes, vous savez que cela va à l'encontre des conditions d'utilisation de Google, n'est-ce pas ? Point 10.4 ici développeurs.google.com/maps/termes Pas d'utilisation du contenu sans une carte Google. À moins que la documentation relative aux API de Google Maps ne vous y autorise expressément, vous n'utiliserez pas le contenu dans une mise en œuvre d'API de Google Maps sans carte Google correspondante. Par exemple, vous pouvez afficher des images Street View sans carte Google correspondante, car la documentation API Maps autorise expressément cette utilisation.
5 votes
Oui, @PirateApp a un bon point. Il existe peut-être de meilleurs services. J'ai travaillé avec SmartyStreets avant et je sais qu'ils ont des conditions de service beaucoup plus ouvertes. La plupart des services ne font pas de géocodage inverse, cependant. Je sais que Texas A&M a un service gratuit mais ils ont TOS avertissant que vous ne pouvez pas collecter des données sur d'autres personnes, et ils ont eu des problèmes de disponibilité et de précision auparavant.