Géocodage en masse de 20 millions d'adresses américaines

34

Existe-t-il des bases de données gratuites ou à prix raisonnable pour les États-Unis où il est possible d'effectuer une recherche et de renvoyer des informations de latitude et de longitude?

Chris Muench
la source
Rapide, c'est bien, mais la précision est tout. - Wyatt Earp Lorsque vous gérez un géocodeur, certains (comme celui référencé dans ce fil) offrent un faible prix pour géocoder de nombreuses adresses, mais si vous recherchez une précision très fine dans de nombreux domaines, vous devez un géocodeur premium. Les résultats seront plus cohérents et d'une précision extraordinaire, en particulier lorsque la correspondance postale ne se produit pas. Vous ne pouvez pas rivaliser avec la géocodage la plus précise possible, sinon vos calculs ne seront pas à la hauteur des autres technologies offrant aux utilisateurs
2
Vous donnez votre avis sur le besoin de haute qualité, mais aucune suggestion. S'il vous plaît fournir certaines de vos suggestions, sinon cela ne permet pas de répondre à la question des utilisateurs.
RyanDalton

Réponses:

30

Pour autant d'enregistrements, n'envisagez même pas un service Web. Ils vont vous étrangler ou vous couper avant que vous puissiez finir votre tâche.

Vous avez alors la possibilité de l’exécuter localement et vous disposez pour cela de plusieurs options commerciales ou gratuites.

Les options libres utiliseront le jeu de données TIGER du recensement que vous devrez charger dans une base de données spatiale. Vous pouvez trouver des bibliothèques qui géocodent contre TIGER pour PostGIS ou même sqlite . Heck, vous pouvez même utiliser ArcGIS pour géocoder avec TIGER. Bien sûr, ArcGIS n’est pas gratuit, ce qui m’amène aux prochaines options commerciales. Si vous avez une licence ArcGIS, vous avez probablement un DVD StreetMap avec un jeu de données TeleAtlas ( je veux dire Tom Tom ) ou Navteq. Cela dépend si vous avez StreetMap Premium fourni. N'importe lequel de ces deux jeux de données vous donnera probablement des résultats plus cohérents que TIGER.

Faites-vous une faveur et faites plusieurs copies de la base de données de rues une fois vos données chargées, puis exécutez le processus de géocodage sur plusieurs machines avec un sous-ensemble de données en entrée. N'essayez pas de l'exécuter sur une seule machine, sinon vous attendrez plusieurs jours avant de la terminer, sans mentionner que le processus que vous exécutez est susceptible de fuir et de planter plusieurs fois avant la fin. Cela signifie que vous souhaitez avoir différents points de contrôle pour votre processus.

Ragi Yaser Burhum
la source
2
J'ai trouvé avantageux de scinder les données d'entrée et d'adresse en parties plus petites (telles que les états). Cela rend les localisateurs plus rapides à utiliser et les processus moins susceptibles de se bloquer après une exécution trop longue. Il n’est généralement pas difficile de programmer une boucle basée sur l’état pour créer le localisateur et le géocodage en une seule fois.
Nathanus
26

Je travaille chez SmartyStreets (une entreprise de vérification d’adresse). Notre service est gratuit pour tout le monde (jusqu'au niveau de base). Les startups peuvent également demander à utiliser notre service de manière totalement gratuite pour la première année. Donc, si vous correspondez à cette classification, notre service illimité est gratuit pendant un an.

Ragi recommande de ne pas utiliser un service Web. Cependant, notre API peut facilement nettoyer, normaliser et géocoder 20 millions d’adresses en environ 5 heures (environ 1 000 par seconde). Une partie de ce temps dépendra de la vitesse de votre machine (le nombre de cœurs que vous avez) et de votre connexion réseau (ne l’essayez pas en 3G, mais une connexion haut débit standard suffira).

Je voulais juste souligner que c'est certainement possible avec un service Web.

Mise à jour: Depuis le 1er août2017, j'ai testé notre service Web à distance et j'ai obtenu 70 000 recherches soutenues par seconde en utilisant un seul MacBook Pro 2015 sur un réseau sans fil. Oui c'est assez rapide. Cela signifie qu'une petite liste comme 20 millions d'adresses prendrait environ 5 minutes.

Jeffrey
la source
2
Eh bien, si vous lui permettez de géocoder 20 millions de disques sans lui facturer un centime et pouvant faire 1000 requêtes par seconde (extrêmement impressionnant), il s'agit bien sûr d’une meilleure solution que de créer votre propre pile à partir de rien.
Ragi Yaser Burhum
1
Absolument. 1000 / seconde pas le max. C'est juste un bon niveau. Le multithreading, les cœurs multiples et les connexions réseau plus rapides pourraient même augmenter ce débit. Un client récent à but non lucratif vient d'utiliser notre service pour traiter 180 millions d'adresses. À l'approche des élections nationales, de nombreux groupes tentent de nettoyer et de géocoder leurs adresses.
Jeffrey
1
@RagiYaserBurhum Notez que Chris cherche également des solutions "à prix raisonnable". Bien sûr, construire votre propre pile à partir de zéro pourrait être "gratuit", mais est-ce vraiment, quand vous considérez votre coût d'opportunité? L'avantage que vous obtenez en faisant tout vous-même: potentiellement sans frais ("gratuit"). L'avantage d'utiliser un service existant: Économiser de nombreuses heures et des heures de temps. De plus, un millier de requêtes / seconde est probablement une routine de nos jours avec des architectures Web modernes (parallélisation) pour gérer des charges de trafic constantes. En fin de compte, je pense que pour cette question, "gratuit" et "à prix raisonnable" est une question de préférence.
Matt
1
@Matt Hands "free" n'est pas toujours gratuit. Je ne discuterai pas contre cela (votre temps vaut de l'argent). Je suis bien conscient que le coût de la plupart des solutions open source correspond en fait à un changement de modèle de coût des licences d'utilisation aux services de support. Je n’essayais pas d’être ironique, je pense que si Jeffey peut offrir la solution gratuitement (ou même à un prix raisonnable), c’est la meilleure solution. Au meilleur prix indiqué par SmartyStreets, 20 millions de points coûteraient 100 000 dollars. Je suis sûr que même pour les cas d'utilisation commerciale, ils peuvent faire une fraction du coût.
Ragi Yaser Burhum
1
De plus, 1000 / req par seconde, ce qui est très faisable dans les architectures contemporaines, nécessiterait encore une ingénierie impressionnante pour le géocodage . Ils obtiennent mes accessoires pour faire ça :)
Ragi Yaser Burhum
8

J'ai utilisé cette procédure pas à pas pour expliquer comment créer un géocodeur postgis à l'aide des données 2010 de TigerLine. Je l'utilise actuellement - ce n'est pas rapide, car il faudra 3 semaines pour géocoder 2 millions d'adresses.

Cependant, c'est gratuit, sans entrave, et il a fallu à quelqu'un avec des compétences minimales en codage et postgres moins de 2 jours pour configurer et charger avec les données d'un (grand) État pour commencer le géocodage. Je n'ai également effectué aucun réglage postgres pour le système et il tourne sur des montages NFS. Je suppose donc que je pourrais obtenir des gains de performances d'un ou deux ordres de grandeur, si j'en avais besoin.

Plutôt que d'utiliser des services Web, j'ai chargé toutes mes adresses dans la base de données postgres, puis j'exécute un script perl rapide et sale pour les géocoder toutes une à la fois:

perl -e for ($i=1; $i<[max_key_value]; $i+=1) 
   {printf "UPDATE source_addresses
               SET (rating, new_address, lon, lat) 
                     = (g.rating, pprint_addy(g.addy), 
                       ST_X(g.geomout), ST_Y(g.geomout) ) 
              FROM (SELECT DISTINCT ON (address_id) address_id, (g1.geo).* 
                      FROM (SELECT address_id, (geocode(address)) As geo 
                              FROM source_addresses As ag 
                             WHERE ag.rating IS NULL and address_id = $i 
                           ) As g1 
                     ORDER BY address_id, rating LIMIT 1
                   ) As g WHERE g.address_id = source_addresses.address_id;\n"
  } | psql -d geocoder 

(les sauts de ligne sont uniquement destinés à la lisibilité)

Donc, cela génère une déclaration de mise à jour "géocodez l'adresse avec cette valeur d'ID et utilisez la meilleure correspondance" et dirigez-la vers psql. Il ne fait que tenter de géocoder des adresses sans classification - c’est-à-dire des adresses où elles ne sont pas déjà géocodées. Donc, il est possible de redémarrer, et chacun est fait indépendamment.

Adam Musch
la source
Avez-vous trouvé les données TigerLine 2010 inexactes pour certaines adresses?
Chris Muench
Ce ne sont en aucun cas des données parfaites; Cependant, les données d'adresse dont je dispose sont septiques du point de vue de la qualité. Le géocodeur, tel qu’il est écrit, fournit un champ "classement", où bas est meilleur. Je vais ajouter un exemple à ma réponse.
Adam Musch
@ChrisMuench: Si vous me donnez une ou deux adresses californiennes, je serais ravi de les filmer avec mon géocodeur pour vous montrer - de cette façon, je ne les choisis pas.
Adam Musch
Eh bien, j'ai essayé le géocodeur postgis pour une adresse à New York, et ils pourraient être éloignés l'un de l'autre
Chris Muench
C'est trop peu, trop tard pour vous, mais quelqu'un d'autre pourrait le trouver utile ... Assurez-vous que votre adresse parse bien. J'ai trouvé que ma plaine concaténée "123 Oak St. Anytown ST 12345" avait été accélérée de 550 fois lorsque j'ai ajouté des virgules: "123 Oak St., Anytown, ST, 12345"
aaryno Le
3

Je suppose que vous voulez géocoder mais que vous ne payez rien? Il existe une foule de services sur lesquels vous pouvez géocoder 20 millions d'enregistrements, mais cela vous coûtera cher. Esri, Pitney Bowes et autres offrent ces services par abonnement ou moyennant un coût par x géocodes. 20 millions, ce n'est pas anodin, mais je suppose qu'il y a une analyse de rentabilisation pour cela.

James Fee
la source
3

Ce message est probablement trop tard pour aider l’affiche originale. Cependant, pour les autres personnes cherchant à géoréférencer gratuitement de grandes quantités de données, vous pouvez consulter mon logiciel appelé "Easy Georeferencer", qui est créé indépendamment, facile à utiliser et pourtant puissant (voir la capture d'écran au bas de l'article).

Le programme est simple et facile à utiliser et s’exécute directement à partir d’un fichier exe ne nécessitant aucune installation. Vous pouvez choisir de géocoder la source de données GNS ou GeoNames et vous pouvez faire ce qu'aucun autre géocodeur ne peut faire jusqu'à présent: géocoder les provinces en fonction de la base de données d'unités administratives GADM, ainsi que les bordures de pays historiques à partir du jeu de données CShapes. Le seul inconvénient est qu'il ne géocode pas les données d'adresse. Toutes les sorties sont fournies sous forme de fichiers de formes prêts à être visualisés / analysés immédiatement dans un SIG.

En ce qui concerne l'efficacité et le traitement des données volumineuses, le programme a été testé pour géocoder 100 000 enregistrements en seulement 3 heures. Pour les ensembles de données plus volumineux, l’augmentation attendue du temps de traitement devrait diminuer de manière curviligne, car une grande partie du temps de traitement n’est affectée qu’à la phase initiale au moment où les ensembles de données de référence pays sont chargés, mais reprend par la suite. De plus, vous n'avez pas à vous soucier des problèmes d'internet ou de connectivité Internet lors du géocodage de grands ensembles de données, car le logiciel, les ensembles de données de référence et le traitement sont tous basés sur l'ordinateur local. Les taux de correspondance peuvent atteindre 80 à 90%, car ils sont basés sur la correspondance des noms flous pour la prise en compte des différences orthographiques.

Plus de détails, y compris une introduction et un guide du débutant, sont inclus dans le package de téléchargement. Nul besoin d’être hésitant à l’essayer, le programme n’est qu’un simple fichier que vous pouvez placer et exécuter sur votre bureau, sans aucun engagement ni encombrement de votre ordinateur.

Le logiciel peut être téléchargé à partir de: http://geocodeanything.wordpress.com/

J'espère que ça t'as aidé.

entrez la description de l'image ici

Karim Bahgat
la source
Vous devez toujours indiquer quels sont l'auteur / le développeur et / ou le travail de la société qui produit un logiciel.
RyanDalton
@RyanDalton J'ai révélé que j'étais l'auteur lorsque j'ai écrit "le logiciel que j'ai créé", bien que je puisse voir comment il aurait pu passer inaperçu, car la phrase ne mettait pas beaucoup l'accent. J'ai modifié ma formulation pour qu'il soit plus clair, j'espère, que je tolère mon propre logiciel.
Karim Bahgat
2

Comme vous géocoderez des adresses américaines, je pense que l’ outil Adresse de la base de données de Data Science Toolkit devrait bien fonctionner pour vous.

This API takes either a single string representing a postal address, or a JSON-encoded  
array of addresses, and returns a JSON object with a key for every address. The value 
for each key is either null if no information was found for the address, or an object 
containing location information, including country, region, city and latitude/longitude 
coordinates.

Vous voudrez peut-être télécharger la machine virtuelle et l'exécuter à partir de votre propre matériel. De cette façon, vous n'avez pas à vous soucier des limites d'API et vous les contrôlez aussi. Oh et j'ai dit que c'est gratuit? ;-)

RK
la source
C'est assez incroyable! Je suis surpris de n'en avoir jamais entendu parler auparavant. De plus, vous pouvez télécharger la machine virtuelle et l'avoir déjà prête à fonctionner sur votre propre système.
RyanDalton
C'est open source aussi. :) github.com/petewarden/dstk
RK
2

Je n'ai vu aucune référence au niveau de précision dont vous avez besoin, mais je suppose que vous voulez un toit long ou proche de celui-ci. La qualité de l'adresse d'entrée peut également être un facteur. Une liste d'adresses bien nettoyée codera mieux et plus rapidement qu'une liste d'adresses incomplètes ou erronées. En outre, un taux de réussite de 90% est-il acceptable ou avez-vous besoin que les 20 millions d'adresses soient codées? Je n'ai pas de solution gratuite, mais je connais et utilise une solution relativement peu coûteuse. ZP4 de Semaphore Corp, http://www.semaphorecorp.com/offre un nettoyeur / géocodeur d’adresses et des add-ons qui traiteront les adresses et renverront une adresse nettoyée, un indicateur indiquant si l’adresse est livrable USPS et le long lat pour le ZIP + 4. La précision ZIP + 4 est généralement proche de la précision sur le toit dans les zones bâties (bon côté de la rue et sur le bon bloc) et non fermée dans les zones rurales. Le coût d'une licence de 30 jours est de 120 $. Après cette période, l'épurateur d'adresses fonctionnera toujours, mais la validation du point de livraison (DPV) et les retours géographiques ne fonctionneront pas. Avec un ordinateur relativement rapide, construit au cours des deux dernières années, et toutes les données stockées et consultées localement, les 20 millions d’enregistrements doivent être effectués dans environ 10 jours. Je géocode des adresses depuis 15 ans et j'utilise ZP4 depuis presque tout le temps. Avant ils ont offert long-lat ou DPV,

Ktreiche
la source
2

Je géocode 18 millions d'adresses en ce moment, donc je veux partager ma configuration.

Fondamentalement, j’ai utilisé un livre de lecture ansible pour configurer l’instance Amazon EC2 en tant que serveur PostGIS Tiger Geocoder, puis un script pour grouper des adresses de géocodage et les mapper à un bloc de recensement.

Le coût d'Amazon EC2: la configuration minimale requise pour le SSD 180G est d'environ 18 $ / mois. Mon instance t2.large coûte environ 90 $ / mois au total.

Si vous avez une boîte Linux avec un SSD> 180G, vous pouvez aussi l’utiliser gratuitement.

Ma performance moyenne est d'environ 170 ~ 300 ms / adresse de bonne qualité, 400 ~ 600 ms / adresse de mauvaise qualité. Par mauvaise qualité, je veux dire que beaucoup d’entre eux ont une ville, un code postal ou une adresse erronée ou manquante. La géocodage de ce type d'adresse prend beaucoup plus de temps; vos performances dépendent donc de la qualité de l'entrée. L'instance Amazon EC2 que j'ai utilisée peut géocoder environ 4 millions d'adresses formatées vraiment mauvaises en un mois.

Pour plus de détails, consultez mon article de blog sur la configuration du système et les scripts.

dracodoc
la source
1

Si votre flux de travail est en Python, geopy est une excellente solution. Vous pouvez écrire votre logique de base de géocodage de manière abstraite, puis choisir l’un des nombreux fournisseurs (ArcGIS, Baidu, Bing, DataBC, GeocodeFarm, GoecoderDotUS, GeoNames, Google, IGN France, LiveAddress, NaviData, Nominatim (OSM), OpenCage, OpenMapQuest, BOSS Yahoo! Find Place, What3Words, Yandex ... ouf). Vous pouvez même les utiliser tous et finalement choisir le point qui a la plus grande confiance en l'exactitude grâce à la validation par plusieurs services de géocodage. Beaucoup de ces services nécessitent une inscription (mais pas tous). Ils peuvent ne pas convenir aussi bien aux États-Unis, mais l’avantage de le faire avec une fonction Python ordonnée est que vous devriez pouvoir le contrôler.

Voici un court exemple:

from geopy.geocoders import Nominatim
geolocator = Nominatim(country_bias='New Zealand', timeout=4)
geocoded = geolocator.geocode('Raglan, Waikato', exactly_one=True)
if geocoded is not None:
    # success
    lat = geocoded.latitude
    lon = geocoded.longitude

https://geopy.readthedocs.org/en/1.10.0/

Vraiment, le seul problème est de s’assurer que vos adresses ne sont pas mal formées. Il faudra probablement beaucoup de temps pour géocoder 20 millions d'emplacements, cependant ... et ce type de charge violera probablement les conditions de service de quelqu'un. J'espère que cela aide quelqu'un.

alphabetasoup
la source
puis-je utiliser un fichier CSV avec cela?
Salman
Bien sûr, si vous le lisez avec Python.
alphabetasoup
0

Si votre demande de géocodage ne dépasse pas 2 500 par jour, vous pouvez utiliser l' API Google Geocoding . vous devriez jeter un coup d'oeil à api, il peut retourner aux résultats en json ou xml.

Limite d'utilisation:

L'utilisation de l'API Google Geocoding est soumise à une limite de 2 500 requêtes de géolocalisation par jour. (L'utilisateur de l'API Google Maps pour les entreprises peut effectuer jusqu'à 100 000 demandes par jour.)

Exemple:

http://maps.google.com/maps/geo?key=yourkeyhere&output=json&q=520+3rd+Street+San+Francisco+CA

Exemple de résultat:

{
  "name": "520 3rd Street San Francisco CA",
  "Status": {
    "code": 200,
    "request": "geocode"
  },
  "Placemark": [ {
    "id": "p1",
    "address": "520 3rd St, San Francisco, Kaliforniya 94107, Amerika Birleşik Devletleri",
    "AddressDetails": {
   "Accuracy" : 8,
   "Country" : {
      "AdministrativeArea" : {
         "AdministrativeAreaName" : "CA",
         "SubAdministrativeArea" : {
            "Locality" : {
               "LocalityName" : "San Francisco",
               "PostalCode" : {
                  "PostalCodeNumber" : "94107"
               },
               "Thoroughfare" : {
                  "ThoroughfareName" : "520 3rd St"
               }
            },
            "SubAdministrativeAreaName" : "San Francisco"
         }
      },
      "CountryName" : "USA",
      "CountryNameCode" : "US"
   }
},
    "ExtendedData": {
      "LatLonBox": {
        "north": 37.7826364,
        "south": 37.7799384,
        "east": -122.3942267,
        "west": -122.3969247
      }
    },
    "Point": {
      "coordinates": [ -122.3955757, 37.7812874, 0 ]
    }
  } ]
}

et vous pouvez consulter un exemple de lien pour le géocodage à partir de Google:

1. Code unique

2. Reverse GeoCoding

3. Commencer avec Google GeoCoding

j'espère que ça vous aide

Aragon
la source
15
Cela prendrait environ 22 ans (8 000 jours) pour géocoder 20 millions d'emplacements. Solution tout à fait raisonnable.
Andy W
Je le sais et je l’ai dit si sa demande de géocode n’excède pas 2 500 personnes par jour, il peut l’utiliser ... c’est une option s’il ne trouve aucune solution
Aragon
4
Cela enfreint les conditions d'utilisation. Il est illégal sauf si vous affichez les résultats sur une carte Google. Même si vous le faites, je trouve "l'argument de la mise en cache" que certaines personnes utilisent un peu trop pour 20 millions de fonctionnalités!
Ragi Yaser Burhum Le