Soi-disant, il est possible de l'obtenir à partir de Google Maps ou d'un autre service. (Les adresses américaines uniquement ne sont pas assez bonnes.)
Le terme que vous recherchez est le géocodage et oui, Google fournit ce service.
Nouvelle API V3 : http://code.google.com/apis/maps/documentation/geocoding/
Ancienne API V2: http://code.google.com/apis/maps/documentation/services.html#Geocoding
En plus du service Web de géocodage Google susmentionné , il existe également un service concurrent fourni par Yahoo . Dans un projet récent où le géocodage se fait avec une interaction utilisateur, j'ai inclus la prise en charge des deux. La raison en est que j'ai constaté que, en particulier en dehors des États-Unis, leur gestion des endroits les plus obscurs varie considérablement. Parfois, Google aura la meilleure réponse, parfois Yahoo.
Une chose à savoir: si Google pense vraiment qu'il ne sait pas où se trouve votre lieu, il retournera une erreur 602 indiquant l'échec. Yahoo, d'autre part, s'il peut décoller une ville/province/état/etc de votre mauvaise adresse, retournera l'emplacement du centre de cette ville. Vous devez donc faire attention aux résultats que vous obtenez pour voir s'ils sont vraiment ce que vous voulez. Il y a des champs auxiliaires dans certains résultats qui vous en parlent: Yahoo appelle ce champ "précision" et Google l'appelle "précision".
Si vous souhaitez le faire sans compter sur un service, vous téléchargez alors les Shapefiles TIGER du recensement américain.
Vous recherchez la rue qui vous intéresse, qui comportera plusieurs segments. Chaque segment aura une adresse de début et une adresse de fin, et vous interpolerez le long du segment pour trouver où se trouve votre numéro de maison sur le segment.
Cela vous fournira une paire lon/lat.
Gardez à l'esprit, cependant, que les services en ligne utilisent beaucoup de vérification et de correction d'adresses, que vous devrez également dupliquer pour obtenir de bons résultats.
Notez également que même si les données gratuites sont agréables, elles ne sont pas parfaites - les dernières rues ne sont pas là (elles peuvent être dans les données utilisées par Google), et les rues peuvent être hors de leur emplacement réel dans une certaine mesure en raison des inexactitudes de l'enquête. Mais pour 98% des besoins de géocodage, il fonctionne parfaitement, est gratuit et vous contrôlez tout pour réduire les dépendances dans votre application.
Openstreetmaps a pour objectif de tout cartographier dans le monde, bien qu'ils ne soient pas tout à fait là, il convient de garder un œil sur eux car ils fournissent leurs données sous une licence CC
Cependant, de nombreux (la plupart?) Autres pays ne sont cartographiés que par le gouvernement ou les services pour lesquels vous devez payer des frais. Si vous n'avez pas besoin de géocoder beaucoup de données, utiliser Google, Yahoo ou certains des autres services de cartographie gratuits dans le monde peut suffire.
Si vous devez géocoder un grand nombre de données, vous serez mieux servi en louant des données cartographiques à un fournisseur majeur, tel que teleatlas.
-Adam
Vous pouvez également essayer le OpenStreetMapNameFinder , qui contient des données de rue open source de type wiki pour (potentiellement) le monde entier. NameFinder cessera d'exister fin août, mais Nominatim est son remplaçant.
Google vous demande d'afficher une carte Google avec leurs données, avec un maximum de 2,5k (au lieu de 25k) requêtes HTTP par jour. Utile mais vous devez surveiller l'utilisation.
Ils ont
http://groups.google.com/group/Google-Maps-API/web/resources-non-google-geocoders
(Google a depuis supprimé cela. Si vous voyez un doublon ou un cache, je vais créer un lien vers cela.)
... dans lequel j'ai trouvé GeoNames qui a à la fois une base de données téléchargeable, un service Web gratuit et un service Web commercial.
Les conditions d'utilisation de Google vous permettront d'utiliser gratuitement leur API de géocodage si votre site Web est à son tour gratuit pour les consommateurs. Sinon, vous devrez obtenir une licence pour Enterprise Maps.
À utiliser avec Drupal et PHP (et facilement modifiable):
function get_lat_long($address) {
$res = drupal_http_request('http://maps.googleapis.com/maps/api/geocode/json?address=' . $address .'&sensor=false');
return json_decode($res->data)->results[0]->geometry->location;
}
Vous pouvez consulter les documents de l'API Google Maps ici pour commencer:
http://code.google.com/apis/maps/documentation/services.html#Geocoding
Cela semble également être quelque chose que vous pouvez faire pour les adresses internationales à l'aide de Live Maps:
http://virtualearth.spaces.live.com/blog/cns!2BBC66E99FDCDB98!1588.entry
Si vous voulez le faire en Python:
import json, urllib, urllib2
address = "Your address, New York, NY"
encodedAddress = urllib.quote_plus(address)
data = urllib2.urlopen("http://maps.googleapis.com/maps/api/geocode/json?address=" + encodedAddress + '&sensor=false').read()
location = json.loads(data)['results'][0]['geometry']['location']
lat = location['lat']
lng = location['lng']
print lat, lng
Notez que Google semble limiter les demandes s'il voit plus d'un certain montant, vous devez donc utiliser une clé API dans votre demande HTTP.
Code R pour obtenir la latitude et la longitude d'une adresse
# CODE TO GET THE LATITUDE AND LONGITUDE OF A STREET ADDRESS WITH GOOGLE API
addr <- '6th Main Rd, New Thippasandra, Bengaluru, Karnataka' # set your address here
url = paste('http://maps.google.com/maps/api/geocode/xml?address=', addr,'&sensor=false',sep='') # construct the URL
doc = xmlTreeParse(url)
root = xmlRoot(doc)
lat = xmlValue(root[['result']][['geometry']][['location']][['lat']])
long = xmlValue(root[['result']][['geometry']][['location']][['lng']])
lat
[1] "12.9725020"
long
[1] "77.6510688"
Vous pouvez également le faire avec les services Web MapPoint de Microsoft.
Voici un article de blog qui explique comment: http://www.codestrider.com/BlogRead.aspx?b=b5e8e275-cd18-4c24-b321-0da26e01bec5
In python using geopy PyPI utilisé pour obtenir la lattitude, la langue, le code postal, etc. Voici l'exemple de code de travail ..
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="your-app-id")
location = geolocator.geocode("Your required address ")
if location:
print('\n Nominatim ADDRESS :',location.address)
print('\n Nominatim LATLANG :',(location.latitude, location.longitude))
print('\n Nominatim FULL RESPONSE :',location.raw)
else:
print('Cannot Find')
Dans Nominatim - Certaines adresses ne fonctionnent pas, j'ai donc juste essayé MapQuest .
Il revient correctement. Mapquest propose 15000 transactions gratuites par mois. Ça me suffit.
Exemple de code:
import geocoder
g = geocoder.mapquest("Your required address ",key='your-api-key')
for result in g:
# print(result.address, result.latlng)
print('\n mapquest ADDRESS :',result.address,result.city,result.state,result.country)
print('\n mapquest LATLANG :', result.latlng)
print('\n mapquest FULL RESPONSE :',result.raw)
J'espère que ça aide.
J'avais un lot de 100 000 enregistrements à géocoder et j'ai rencontré la limite de l'API Google (et comme c'était pour une application d'entreprise interne, nous avons dû passer à leur service premium qui est de 10 000 $ et plus)
J'ai donc utilisé ceci à la place: http://geoservices.tamu.edu/Services/Geocode/BatchProcess/ - ils ont aussi une API. (le coût total était d'environ ~ 200 $)
Vous pouvez essayer cela en JavaScript pour une ville comme kohat
var geocoder = new google.maps.Geocoder();
var address = "kohat";
geocoder.geocode( { 'address': address}, function(results, status) {
var latitude = results[0].geometry.location.lat();
var longitude = results[0].geometry.location.lng();
alert(latitude+" and "+longitude);
}
});
Je sais que c'est une vieille question, mais Google change de façon d'obtenir la latitude et la longitude sur une base régulière.
Code HTML
<form>
<input type="text" name="address" id="address" style="width:100%;">
<input type="button" onclick="return getLatLong()" value="Get Lat Long" />
</form>
<div id="latlong">
<p>Latitude: <input size="20" type="text" id="latbox" name="lat" ></p>
<p>Longitude: <input size="20" type="text" id="lngbox" name="lng" ></p>
</div>
Code JavaScript
<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap" async defer></script>
<script>
function getLatLong()
{
var address = document.getElementById("address").value;
var geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var latitude = results[0].geometry.location.lat();
document.getElementById("latbox").value=latitude;
var longitude = results[0].geometry.location.lng();
document.getElementById("lngbox").value=longitude;
}
});
}
</script>
Pour plus d'informations, consultez ce lien https://www.phpkida.com/Java-script/get-latitude-longitude-from- adresse /