Géocodage des adresses américaines qui ne peuvent pas être envoyées sur Internet?

46

Pour un projet ponctuel, je dois géocoder quelques milliers d'adresses. Dans le passé, j’utilisais diverses ressources en ligne pour ce genre de choses (par exemple, l’API Google Maps), mais les adresses avec lesquelles je travaille doivent rester confidentielles - c’est-à-dire qu’elles ne doivent pas être envoyées par Internet -clad garantie de la vie privée. Quelles autres options ai-je?

Matt Parker
la source
4
Y a-t-il une localité spécifique dans laquelle vous souhaitez géocoder? Par exemple, l' Australie, Etats - Unis, un état spécifique, etc.
fmark
Bonne question - je m'intéresse plus particulièrement aux États-Unis, au Colorado en particulier, aux comtés de Front Range.
Matt Parker
1
Je voudrais vraiment entamer une brève discussion avec RTD. Je sais que dans ce domaine, ils disposent d’un puissant SIG et pourraient probablement vous apporter un soutien direct. Autrement; Geocoder :: US est une excellente option. Vous pouvez l'exécuter en interne et ne pas risquer de perdre vos données.
DEWright
@ DEWright, c'est une idée intéressante, encore plus pour une autre question . Merci!
Matt Parker

Réponses:

10

Si vous préférez utiliser l'API Google Geocoding ou une autre source en ligne plutôt que des options locales, nous vous conseillons de vous pencher sur le projet Tor (facilement installé via l'ensemble "Vidalia Bundle").

Tor vous protège en faisant rebondir vos communications sur un réseau distribué de relais gérés par des bénévoles du monde entier: cela empêche ... les sites que vous visitez de ne pas connaître votre emplacement physique.

Avec l'injection d'adresses aléatoires et l'utilisation de ssl (https) pour chiffrer les communications vers leurs points de terminaison (assurez-vous également que vous le faites également), je ne vois pas de moyen plus sûr de géocoder à distance. Quel que soit le service de géocodage que vous utilisez, il ne sera jamais possible d'identifier l'origine des demandes, et avec https, personne d'autre ne le fera. Remarque: n'utilisez pas un service de géocodage nécessitant une clé API pour cela, sinon vous ne serez plus anonyme. (Google n'a plus besoin d'une clé d'api).

L’un des avantages de cette procédure est que vous ne serez plus limité à un nombre quelconque de demandes de géocodage, car vos demandes donneront l’impression qu’elles proviennent de plusieurs adresses IP. Cependant, je ne pas recommander ou cautionne abuser de ces belles API libres! Le débit sera toujours limité si le débit de l’API est limité (bien que la vitesse de transmission utilisant Tor soit un peu plus lente que la connexion directe).

Etude de cas en Python - Une fois que vous avez installé Vidalia Bundle et que le proxy a été exécuté sur 127.0.0.1:8118 (valeur par défaut), vous pouvez configurer un proxy https urllib2 à partir de Python 2.7 ou version ultérieure:

import urllib2
proxy = urllib2.ProxyHandler({'https': '127.0.0.1:8118'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
response = urllib2.urlopen("https://maps.google.com/maps/geo?q=Los+Angeles&sensor=false&gl=us")

Notez que les proxies urllib2 ne fonctionnent pas avec https avant au moins Python 2.7, donc cette méthode ne fonctionne qu'avec les versions récentes de Python. Assurez-vous que vous avez «https» (pas «http») aux deux endroits dans l'exemple ci-dessus. Je l'ai seulement testé avec Python 2.7.1.

Vidalia modifie votre identité / adresse IP apparente toutes les 10 minutes, mais si vous rencontrez des problèmes de taux ou d'autres problèmes (erreurs de dépassement de quota), ou si vous êtes particulièrement paranoïaque et souhaitez modifier votre identité plus souvent, vous pouvez modifier votre identité Tor. en utilisant le code python ici (légèrement modifié ci-dessous). Vous devrez changer le mot de passe Tor en un mot de passe statique (plutôt que généré aléatoirement) en entrant les paramètres de Vidalia. Vous devrez peut-être également redémarrer Vidalia après toutes les modifications.

p = "MySuperSecurePassword"
def renewTorIdentity():
    success = False
    try:
        s = socket.socket()
        s.connect(('localhost', 9051))
        s.send('AUTHENTICATE "' + p + '"\r\n')
        resp = s.recv(1024)
        if resp.startswith('250'):
            s.send("signal NEWNYM\r\n")
            resp2 = s.recv(1024)
            if resp2.startswith('250'):
                success = True
    except:
        success = False
    return success
Victor Van Hee
la source
4
Cela ne garde pas les adresses confidentielles, n'est-ce pas? L'emplacement physique de la machine qui envoie la requête est sans importance (non confidentiel) ici.
underdark
4
Dans la plupart des cas, l'emplacement physique de la machine qui envoie la requête est très important pour protéger l'anonymat des données envoyées à un service de géocodage. Supposons qu’un ordinateur de l’Institut pour l’étude de X envoie une demande de géocodage pour 1 000 adresses. On pourrait (théoriquement au moins) identifier ces adresses comme contenant des individus atteints de la maladie X. En revanche, les adresses mélangées à des milliers de requêtes aléatoires émanant de nombreux utilisateurs et provenant d'adresses multiples ne correspondant à aucun utilisateur (la situation de Tor) ne sont pas identifiables par rapport à leur objectif.
Victor Van Hee
L'envoi de données à Google (via Tor ou autre) est un problème fondamental de confidentialité. Google n'offre pas la "garantie absolue de confidentialité".
Nicolas Raoul
7

Une option consiste à utiliser Geo-Coder-US , qui est un module Perl à source ouverte qui utilise les données Tiger / Line du recensement des États-Unis pour géocoder. Je ne l'ai pas utilisé personnellement, mais il a l'air excellent. Le lien ci-dessus comprend un bon aperçu et un lien vers une version qui contient déjà les fichiers de recensement nécessaires.

Matt Parker
la source
6

La bibliothèque Geokit peut utiliser Google, Yahoo, Geocoder.us, Geocoder.ca et Geonames. Il est écrit en Ruby, et il existe également une bibliothèque sœur pour vos projets Ruby on Rails:

http://geokit.rubyforge.org/

Pour préserver la confidentialité, vous pouvez adresser des requêtes à tous les fournisseurs en les séparant en ensembles moins susceptibles d’être liés à vos activités. Vous pouvez également injecter du bruit dans vos adresses en ajoutant des adresses réelles à partir d’un annuaire téléphonique en ligne. Et je vous suggère de lancer ce script à partir de différents endroits, tels que les cybercafés, en combinant les résultats à la fin.

Le seul moyen de préserver réellement votre vie privée est de télécharger l'ensemble des données et d'exécuter votre script en conséquence. Il y a le système Nominatim d'OpenStreetMap. Il n'est pas complet pour toutes les villes, mais vous pouvez l'utiliser pour réduire la liste d'adresses envoyées à d'autres fournisseurs.

Nicolas Marchildon
la source
5

Bien qu'encore au début de son développement, http://openaddresses.org/ a pour objectif de fournir une base de données ouverte d'adresses mondiales et les services de géocodage associés.

Bien qu’elle ne soit pas privée, la nature d’une base de données d’adresses ouvertes pourrait signifier qu’elle peut être téléchargée dans son intégralité (ou au moins pour certaines régions) afin de permettre le géocodage hors connexion.

geographika
la source
3

Je pensais que le code derrière http://geocoder.us/ était disponible au téléchargement, vous permettant ainsi de l'obtenir ainsi qu'un fichier de données TIGER et de configurer plus ou moins votre propre installation locale. Je ne vois pas cela immédiatement après avoir visité ce site, mais vous voudrez peut-être regarder un peu.

Joe Germuska
la source
3

Pourquoi ne pas utiliser les mêmes géocodeurs que vous avez utilisés auparavant, supprimez simplement toutes les autres métadonnées?

N'envoyez pas "Lieu secret; 123 rue principale, une ville", mais juste "123 rue principale, une ville"? Les adresses sont de toute façon des informations publiques. Ne dites simplement pas au géocodeur que vous avez une liste de bases nucléaires ou de tous les emplacements de la NSA. Les résultats seront sous forme de tableau, vous pourrez alors rattacher toutes vos autres méta-données secrètes.

Vadim
la source
1
C'est ce que je ressens à propos de la situation. Ce n'est pas ce que mon employeur pense de la situation. Pour donner le bénéfice du doute, si vous obtenez une liste d'adresses à partir d'une adresse IP reconnaissable, il n'est pas exagéré d'imaginer que quelqu'un puisse comprendre à quoi les adresses se rapportent.
Matt Parker
1
@ Matt C'est une chose pour laquelle les consultants sont bons :-). Une autre option consiste à mélanger diverses adresses avec celles que vous avez envoyées. Bien sûr, cela augmente les coûts, mais ils sont si bas quand même ...
whuber
3

La recherche sur la page d'accueil OpenStreetMap est un système appelé Nominatim . Vous pouvez l'appeler en tant que service de géocodage (si vous êtes gentil), mais tout est open source, vous pouvez donc le configurer également sur votre propre serveur.

Ceci utilise des données OpenStreetMap chargées dans la base de données postGiS. Il est relativement nouveau et en cours de développement, et le processus de configuration et de chargement des données n’est pas si simple et si gourmand en ressources. ... mais c'est gratuit et ouvert!

Harry Wood
la source
3

La plupart des réponses vous dirigent vers une base de données locale. Bien que cela fonctionnerait certainement, vous devez également déterminer si le gecodage est votre domaine principal. (Est-ce ce que vous êtes bon? Si oui, vous avez probablement déjà les données qu'ils recommandent. Sinon, ET VOUS VOULEZ ÊTRE, alors vous devriez télécharger les données et les faire juste localement. Cependant, si vous avez juste besoin pour résoudre un problème et ne pas vouloir consacrer d'innombrables heures à la production, il existe toujours des options pour le faire via une API sans compromettre la sécurité.

Tout d’abord, insistez sur HTTPS car vous avez besoin que les données soient sécurisées avant de vous rendre à l’API, puis de revenir à vous. Deuxièmement, assurez-vous que vous faites une demande POST au lieu d'une demande GET à l'API. En utilisant POST, vous ne faites que transmettre une demande d’URL avec une charge utile et le seul résultat susceptible de toucher le journal du serveur est le fait qu’une demande de vérification d’adresse et de géocodage a été effectuée à une heure donnée et à partir d’une adresse IP donnée. Ni l'adresse soumise, ni l'adresse renvoyée ne seraient stockées sur le disque ou écrites dans un journal du serveur. Ce n'est pas beaucoup plus sûr que ça.

Ainsi, bien qu’une boîte locale soit définitivement sécurisée, elle pourrait nécessiter beaucoup de développement pour répondre à vos besoins. Les problèmes de sécurité pouvant être apaisés, vous pouvez envisager (à nouveau) la possibilité d’utiliser une API.

Je travaille pour une entreprise de vérification d'adresses spécialisée dans le géocodage par API sécurisée - SmartyStreets .

Jeffrey
la source
1

Configurez le géocodeur Tiger PostGIS dans votre boîte Linux locale. C'est certes plus encombrant qu'une API en ligne, mais peut-être le meilleur choix pour votre situation. Et il peut s’adapter à des millions d’adresses si nécessaire.

Avec l'aide de Ansible Playbook, l'installation du serveur sous Linux est beaucoup plus simple qu'auparavant. La rédaction de requêtes SQL prendra probablement plus de temps si vous n'êtes pas familiarisé avec SQL ou PostGIS.

Vous pouvez vérifier la configuration de mon système et mon script pour plus de détails. Il devrait inclure toutes les informations dont vous aviez besoin.

dracodoc
la source