web-dev-qa-db-fra.com

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

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.)

74
Ola Eldøy

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

70
Sijin

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

22
Tim Farley

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

15
Adam Davis

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.

9
peSHIr

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.

7
Richard Watson

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.

4
Craig Wohlfeil

À 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;
}
3
Nate Wildermuth

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

2
Carl

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.

2
Suman

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"
2
Selva

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

2
Stephen Curial

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.

1
Parthiban.S

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 $)

1
paras_doshi

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);
  } 
});

enter image description here

1
Adiii

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 /

0
Mukesh Jakhar