Comment obtenir la longitude et la latitude pour une adresse de rue par programmation (et légalement)

Soi-disant, il est possible de l’obtenir à partir de Google Maps ou d’un tel service. (Les adresses américaines ne suffisent pas.)

Le terme que vous recherchez est le géocodage et oui, Google fournit ce service.

Outre le service Web de géocodage Google susmentionné, Yahoo propose également un service concurrent. Dans un projet récent où le géocodage est réalisé avec l’interaction de l’utilisateur, j’ai inclus les deux. La raison en est que j’ai constaté que, surtout en dehors des États-Unis, leur manipulation de lieux plus obscurs varie considérablement. Parfois, Google aura la meilleure réponse, parfois Yahoo.

Une chose à savoir: si Google pense vraiment ne pas savoir où vous êtes, ils vous renverront une erreur 602 indiquant un échec. Yahoo, en revanche, s’il peut extraire une ville / province / état / etc de votre mauvaise adresse, renverra 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 annexes dans certains résultats qui vous en disent long: Yahoo appelle ce champ “précision” et Google l’appelle “précision”.

Si vous voulez faire cela sans avoir recours à un service, téléchargez les fichiers de formes TIGER du recensement américain.

Vous regardez 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 le numéro de votre maison sur le segment.

Cela vous donnera une paire lon / lat.

Gardez à l’esprit, cependant, que les services en ligne requièrent beaucoup de vérification et de correction des adresses, que vous devez également dupliquer pour obtenir de bons résultats.

Notez également que les données libres sont aussi bonnes que parfaites: les rues les plus récentes ne sont pas là (elles peuvent figurer dans les données utilisées par Google) et les rues risquent de ne pas être dans leur emplacement réel en raison d’imprécisions dans les enquêtes. Mais pour 98% des besoins de géocodage, cela fonctionne parfaitement, est gratuit et vous contrôlez tout pour réduire les dépendances dans votre application.

Openstreetmaps a pour objective de tout cartographier dans le monde, même s’ils ne sont pas tout à fait là.

Toutefois, de nombreux autres pays (la plupart?) 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 d’autres services de cartographie gratuits dans le monde entier peut suffire.

Si vous devez géocoder un grand nombre de données, vous serez mieux servi en louant des données cartographiques auprès d’un fournisseur majeur, tel que teleatlas.

-Adam

Vous pouvez également essayer OpenStreetMap NameFinder , qui contient des données de rue open source, de type wiki, pour (potentiellement) le monde entier. NameFinder cessera d’exister à la fin du mois d’août, mais Nominatim est son remplaçant.

Google exige que vous affichiez une carte Google avec leurs données, avec un maximum de requêtes HTTP de 2,5 k (soit 25 k) par jour. Utile mais vous devez regarder l’utilisation.

Ils ont

http://groups.google.com/group/Google-Maps-API/web/resources-non-google-geocoders

(Google a depuis enlevé cela. Si vous voyez un doublon ou un cache, je vais créer un lien vers cela.)

… dans lequel j’ai trouvé GeoNames qui possède à la fois une firebase database 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 les cartes d’entreprise.

Pour une utilisation avec Drupal et PHP (et facilement modifié):

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 docs de l’API Google Maps ici pour commencer.

http://code.google.com/apis/maps/documentation/services.html#Geocoding

Il semble également que vous puissiez faire quelque chose pour les adresses internationales en utilisant Live Maps également:

http://virtualearth.spaces.live.com/blog/cns!2BBC66E99FDCDB98!1588.entry

Vous pouvez également le faire avec les services Web MapPoint de Microsoft.

Voici un article de blog qui explique comment: http://www.codessortingder.com/BlogRead.aspx?b=b5e8e275-cd18-4c24-b321-0da26e01bec5

Code R pour obtenir la latitude et la longitude d’une adresse postale

 # 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" 

Si vous voulez faire cela 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 requêtes s’il détecte plus d’un certain montant. Vous souhaitez donc utiliser une clé API dans votre requête HTTP.

J’ai eu un lot de 100 000 enregistrements à géocoder et j’ai rencontré les limites de l’API Google (et comme c’était le cas pour une application d’entreprise interne, nous devions passer à leur service premium, soit 10 000 $ plus)

Donc, j’ai 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 ceci en JavaScript pour la 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); } }); 

entrer la description de l'image ici