web-dev-qa-db-fra.com

Comment convertir une adresse en latitude / longitude?

Comment puis-je convertir une adresse ou une ville en latitude/longitude? Existe-t-il des équipements commerciaux dans lesquels je peux "louer" ce service? Ce serait utilisé dans une application de bureau commerciale sur un PC Windows avec un accès Internet à temps plein.

69
swilc0x

Google possède une API de géocodage qui semble fonctionner assez bien pour la plupart des emplacements pour lesquels elle dispose de données Google Maps.

http://googlemapsapi.blogspot.com/2006/06/geocoding-at-last.html

Ils fournissent un géocodage en ligne (via JavaScript):

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

Ou géocodage backend (via une requête HTTP):

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

Les données sont généralement les mêmes que celles utilisées par Google Maps. (notez qu'il existe quelques exceptions à cela, comme au Royaume-Uni ou en Israël, où les données proviennent d'une source différente et d'une qualité légèrement réduite)

47
mopoke

Il n’ya rien de bien nouveau à ajouter, mais j’ai beaucoup d’expérience dans le monde des systèmes d’information géographique et du géocodage dans le cadre d’un emploi précédent. Voici ce dont je me souviens:

Si votre application a besoin de "de temps en temps", je recommanderais sans aucun doute les API de géocodage de Google ou de Yahoo, mais veillez à lire leurs conditions de licence.

Je sais que l'API Google Maps en général est facile à utiliser même pour des pages Web commerciales, mais je ne peux pas l'utiliser dans un accès payant. En d'autres termes, vous pouvez l'utiliser pour annoncer ou fournir un service générant des revenus publicitaires, mais vous ne pouvez pas facturer l'accès des internautes à votre site, ni même le placer derrière un système de mot de passe.

Malgré ces restrictions, ils constituent un excellent choix, car ils mettent fréquemment à jour leurs bases de données. La plupart des outils d'arrière-plan et des bibliothèques gratuits utilisent des données routières de recensement et TIGER qui sont rarement mises à jour. Vous avez donc moins de chances de géocoder des adresses dans des zones à croissance rapide ou dans de nouvelles subdivisions.

La plupart des services limitent également le nombre de requêtes de géocodage que vous pouvez effectuer chaque jour. Vous pouvez donc rechercher les adresses des nouveaux clients ajoutés à votre base de données, par exemple, mais si vous exécutez un travail par lots qui alimente des milliers d'adresses. votre base de données dans le géocodeur, vous allez être coupé.

Je ne pense pas que celui-ci ait déjà été mentionné, mais ESRI a services Web ArcWeb qui incluent le géocodage, bien qu'ils ne soient pas très économiques. La dernière fois que je les utilisais, cela coûtait environ 1,5 centime par recherche, mais vous deviez payer à l'avance un certain montant pour commencer. Là encore, l’avantage majeur est que les données routières qu’ils utilisent sont mises à jour en temps utile et que vous pouvez les utiliser dans des situations commerciales que Google ne permet pas. Le service ArcWeb servira également à la production de photos satellite et aériennes haute résolution à la Google Maps, à nouveau tarifées à la demande.

Si vous souhaitez utiliser vos propres données ou avoir accès à des données beaucoup plus précises, vous pouvez acheter des abonnements aux données SIG auprès d'entreprises telles que TeleAtlas , mais ce n'est pas bon marché. Vous ne pouvez acheter que des données d’un État ou d’un comté si vos besoins sont extrêmement locaux. Il existe plusieurs niveaux de données - fonctionnalités SIG uniquement, SIG et rues détaillées, tout cela en plus des données de géocodage, tout cela en plus des limites de circulation/direction/vitesse du trafic pour le routage. Bien sûr, le prix augmente au fur et à mesure que vous montez dans les étages.

Enfin, l'article de Wikipedia sur Géocodage contient de bonnes informations sur les algorithmes et les techniques. Même si vous ne le faites pas dans votre propre code, il est utile de savoir quel type d'erreur et de précision vous pouvez vous attendre de différents types de sources de données.

25
CMPalmer

Services Web Yahoo! Maps - API de géocodage géocode avec précision les codes postaux du Royaume-Uni, contrairement à l'API de Google.

Malheureusement, Yahoo n'a plus ce service, vous pouvez visiter http://developer.yahoo.com/geo/placefinder/ pour le service de Yahoo

11
David
10
Ben Dehghan

Ayant déjà lancé ma propre solution pour cela auparavant, je peux de tout cœur recommander le module Geo :: Coder :: US Perl pour cela. Il suffit de télécharger toutes les données du recensement et d'utiliser l'importateur inclus pour créer la base de données Berkeley pour votre pays et pointer le script Perl dessus. Utilisez le module d’analyse d’adresses intégré au module: Un système de géocodage hors ligne!

5
willasaywhat

Lorsque vous convertissez une adresse ou un objet en lat/long, cela s'appelle le géocodage.

Il existe de nombreuses solutions de géocodage. La solution adaptée à votre projet dépendra de l'acceptabilité des conditions de licence de chaque solution de géocodage. Microsoft Virtual Earth et Google Maps proposent des solutions qui peuvent être utilisées librement sous des licences très restrictives ...

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

http://www.Microsoft.com/virtualearth/product/faq.aspx

5
Michael

Essayez avec ce code, je travaille comme ceci avec les adresses:

C'est un lien dans lequel, avec la méthode GET, vous allez envoyer une requête et obtenir les lat et lng. http://maps.google.com/ maps/api/geocode/json? address = YOUR ADDRES & sensor = false

Par exemple: http://maps.google.com/maps/api/geocode/json?address=W Main St, Bergenfield , NJ 07621 & sensor = false

1. Créez votre méthode GET.

 public static String GET(String url) throws Exception {//GET Method
        String result = null;
        InputStream inputStream = null;
        try {
            HttpClient httpclient = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(url);

        Log.v("ExecuteGET: ", httpGet.getRequestLine().toString());

        HttpResponse httpResponse = httpclient.execute(httpGet);
        inputStream = httpResponse.getEntity().getContent();
        if (inputStream != null) {
            result = convertInputStreamToString(inputStream);
            Log.v("Result: ", "result\n" + result);
        } 
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
}

2. Créer une méthode pour envoyer une demande

@SuppressWarnings("deprecation")
    public static String getLatLng(String accessToken) throws Exception{
        String query=StaticString.gLobalGoogleUrl+"json?address="+URLEncoder.encode(accessToken)+"&sensor=false";
        Log.v("GETGoogleGeocoder", query+"");
        return GET(query);
    }

gLobalGoogleUrl = "http://maps.google.com/maps/api/geocode/"

3. Méthode d'appel getLatLng

String result=getLatLng("W Main St, Bergenfield, NJ 07621");

4. Analyser JSONObject

Maintenant le résultat est JSONObject avec des informations sur address et lan, lng. Analyser JSONObject (résultat) avec gson () . Après cela, utilisez lat, lng.

Si vous avez une question sur le code, posez-la.

4
MilanNz

Vous voulez une application de géocodage. Celles-ci sont disponibles en ligne ou en tant que programme d’application.

2
Christopher Currie

Maptsraction ( http://www.mapstraction.com ) vous permet de choisir entre un nombre quelconque de services de géocodage. Cela pourrait être utile si vous devez en faire de grandes quantités, car je sais que Google a une limite à ce que vous pouvez faire par jour.

2
ian93

Terre virtuelle le fait. Il existe également un service Web sur geocoder.us

2
Charles Graham

Vous pouvez également essayer le OpenStreetMapNameFinder (ou l'actuel Nominatim ), qui contient des données de rue open source de type wiki pour (potentiellement) le le monde entier.

2
peSHIr

vous pouvez utiliser les services soap de bing maps, où vous pouvez faire référence à un service de géocode inversé pour trouver une adresse lat/longue, voici le lien http://msdn.Microsoft.com/en-us/library /cc980922.aspx

1
Blazen

vous parlez de Geocoder. Google fournit une API pour cela. Il en va de même pour un autre fournisseur.

vous pouvez voir la démo de mise en œuvre dans Mon emplacement actuel .net

0
Toni Tegar Sahidi
0
Cristian Ciupitu

Je pensais en ajouter un de plus à la liste. Texas A & M propose un service à prix assez décent ici: http://geoservices.tamu.edu/Services/Geocode/

Une bonne option si vous avez un assez grand nombre d’adresses à géocoder et que vous ne voulez pas envoyer 10k à Google ou Microsoft. Nous avons quand même fini par utiliser les données renvoyées dans Google Map.

0
ficuscr

Vous pouvez utiliser les services Web MapPoint de Microsoft.

J'ai créé un entrée de blog pour convertir une adresse en un GeoCode (lat/long).

0
Stephen Curial