Геокодирование адресов США, которые не могут быть отправлены через Интернет?

46

Для одноразового проекта мне нужно геокодировать несколько тысяч адресов. В прошлом я использовал различные онлайн-ресурсы для такого рода вещей (например, Google Maps API), но адреса, с которыми я работаю, должны храниться в тайне - это означает, что не нужно отправлять их через Интернет, если только нет железа -обеспеченная гарантия конфиденциальности. Какие еще варианты у меня есть?

Мэтт Паркер
источник
4
Есть ли конкретный населенный пункт, в котором вы хотели бы геокодировать? Например, Австралия, США, конкретный штат и т. Д.
fmark
Хороший вопрос - меня интересуют США в целом, в частности, Колорадо, округа Front Range.
Мэтт Паркер
1
Я бы действительно открыл быструю дискуссию с RTD, я знаю, что в этой области они имеют мощную ГИС и, вероятно, могут оказать вам прямую поддержку. В противном случае; Геокодер :: США - отличный вариант. Вы можете запустить его изнутри, не рискуя своими данными, передаваемыми по проводам.
DEWright
@ Правильно, это интересная идея, особенно в отношении другого моего вопроса . Спасибо!
Мэтт Паркер

Ответы:

10

Если вы предпочитаете использовать API геокодирования Google или другой онлайн-источник, а не локальные параметры, я бы посоветовал заглянуть в проект Tor (легко устанавливаемый через пакет под названием «Vidalia Bundle»).

Tor защищает вас, направляя ваши сообщения по распределенной сети ретрансляторов, управляемых добровольцами по всему миру: это предотвращает ... посещаемые вами сайты от изучения вашего физического местоположения.

Наряду с введением случайных адресов и использованием ssl (https) для шифрования связи с их конечными точками (убедитесь, что вы тоже это делаете), я не могу придумать более безопасный способ удаленного геокодирования. Какой бы сервис геокодирования вы не использовали, он никогда не сможет определить, откуда в конечном итоге поступили запросы, и с https никто другой не сможет это сделать. Примечание: не используйте сервис геокодирования, для которого требуется ключ API, иначе вы больше не будете анонимным. (Google больше не требует ключ API).

Дополнительным «преимуществом» этой процедуры является то, что вы больше не будете ограничены каким-либо количеством запросов геокодирования, поскольку ваши запросы будут выглядеть так, как будто они поступают с нескольких IP-адресов. Тем не менее, я не рекомендую и не одобряю злоупотребления этими прекрасными бесплатными API! Скорость будет по-прежнему ограничена, если API ограничивает скорость (хотя скорость передачи с использованием Tor немного ниже, чем при прямом подключении).

Пример из практики на Python - После того, как вы установили Vidalia Bundle и прокси-сервер работал на 127.0.0.1:8118 (по умолчанию), в Python 2.7 или выше вы можете настроить https urllib2 прокси, используя:

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

Обратите внимание, что прокси-серверы urllib2 не работают с https по крайней мере до версии Python 2.7 или около того, поэтому этот метод работает только с последними версиями Python. Убедитесь, что у вас есть «https» (не «http») в обоих местах в примере выше. Я только протестировал это с Python 2.7.1.

Vidalia меняет вашу личность / очевидный источник IP-адреса каждые 10 минут, но если у вас возникают медленные темпы или другие проблемы (квота превышена ошибками), или если вы особенно параноик и хотите менять свою личность чаще, вы можете изменить свою личность Tor используя код Python здесь (немного изменены ниже). Вам нужно будет изменить пароль Tor на статический (а не случайно сгенерированный), введя настройки Vidalia. Может также понадобиться перезапустить Vidalia после всех изменений.

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
Виктор Ван Хи
источник
4
Это не делает адреса конфиденциальными, не так ли? Физическое местонахождение компьютера, отправляющего запрос, здесь не имеет значения (не является конфиденциальным).
Подземье
4
В большинстве случаев физическое местоположение машины, отправляющей запрос, очень важно для защиты анонимности данных, отправляемых в службу геокодирования. Скажем, что компьютер из Института по изучению Х отправляет запрос геокодирования на 1000 адресов. Можно (по крайней мере теоретически) идентифицировать эти адреса как содержащие людей с Х-болезнью. Напротив, адреса, смешанные с тысячами случайных запросов от многих пользователей и поступающие с нескольких IP-адресов, которые не соответствуют ни одному из пользователей (ситуация Tor), не могут быть идентифицированы с точки зрения цели.
Виктор Ван Хи
Отправка данных в Google (через Tor или что-то еще) является фундаментальной проблемой конфиденциальности. Google не предлагает «железную гарантию конфиденциальности».
Николас Рауль
7

Одним из вариантов является использование Geo-Coder-US , который представляет собой Perl-модуль с открытым исходным кодом, который использует данные Tiger / Line переписи США для геокодирования. Я не использовал это лично, но это выглядит превосходно. Ссылка выше включает хороший обзор и ссылку на версию, в которой уже собраны необходимые файлы переписи.

Мэтт Паркер
источник
6

Библиотека Geokit может использовать любой из Google, Yahoo, Geocoder.us, Geocoder.ca и Geonames. Он написан на Ruby, и есть также родственная библиотека для ваших проектов Ruby on Rails:

http://geokit.rubyforge.org/

Чтобы сохранить конфиденциальность, вы можете распространять запросы среди всех поставщиков, разделяя их на наборы, которые с меньшей вероятностью будут связаны с вашей деятельностью. Вы также можете добавить шум в свои адреса, добавив реальные адреса из телефонного справочника онлайн. И я предлагаю вам запустить этот скрипт из разных мест, таких как интернет-кафе, объединяя результаты в конце.

Единственный способ по-настоящему сохранить вашу конфиденциальность - это загрузить полный набор данных и запустить свой сценарий против него. Есть система Nominatim от OpenStreetMap. Это не полный для всех городов, но вы можете использовать это, чтобы уменьшить список адресов, отправляемых другим провайдерам.

Николас Марчилдон
источник
5

Хотя http://openaddresses.org/ все еще находится на ранних стадиях разработки, его цель - предоставить открытую базу данных адресов по всему миру и связанных с ними услуг геокодирования.

Хотя база данных с открытым адресом не является частной, она может означать, что ее можно загрузить полностью (или, по крайней мере, для отдельных регионов), чтобы разрешить геокодирование в автономном режиме.

geographika
источник
3

Я думал, что код http://geocoder.us/ был доступен для загрузки, так что вы можете получить его и файл данных TIGER и более или менее настроить свою собственную локальную установку. Я не вижу этого сразу после посещения этого сайта, но вы можете осмотреться.

Джо Гермуска
источник
3

Почему бы не использовать те же геокодеры, которые вы использовали ранее, просто удалить все остальные метаданные?

Не перешлите «Секретное место; 123 Мэйн-стрит, какой-то город», просто отправьте «123 Мейн-стрит, какой-то город»? В любом случае, адреса являются публичной информацией. Только не говорите геокодеру, что у вас есть список ядерных баз или все места расположения АНБ. Результаты будут представлены в табличном формате, после чего вы сможете повторно прикрепить все остальные секретные метаданные.

Вадим
источник
1
Вот как я отношусь к ситуации. Это не то, как мой работодатель относится к ситуации. Чтобы воспользоваться преимуществом сомнения, если вы получите список адресов с распознаваемого IP-адреса, не так уж сложно представить, что кто-то может выяснить, к каким адресам относится.
Мэтт Паркер
1
@Matt Это одна вещь, для которой хороши консультанты :-). Другой вариант - смешать разные адреса с теми, которые вы отправляете. Конечно, это увеличивает затраты, но они все равно настолько низкие ...
whuber
3

Поиск на домашней странице OpenStreetMap представляет собой систему под названием Nominatim . Вы можете называть это сервисом геокодирования (если вы осторожны), но все это с открытым исходным кодом, так что вы можете настроить его и на своем собственном сервере.

Это использует данные OpenStreetMap, загруженные в базу данных postGiS. Он относительно новый и все еще находится в стадии разработки, и процесс настройки и загрузки данных не так уж прост и требует значительных ресурсов. ... но это бесплатно и открыто!

Гарри Вуд
источник
3

Большинство ответов направляют вас к локальной базе данных. Хотя это, безусловно, сработает, вы также должны учитывать, является ли геокодирование вашим основным доменом. (Это то, в чем вы хороши? Если это так, у вас, вероятно, уже есть данные, которые они рекомендуют. Если нет, И ВЫ ХОТИТЕ, ЧТОБЫ БЫТЬ, то вам следует загрузить данные и просто сделать это локально. Однако, если вам просто нужно Чтобы решить проблему и не хотеть затрачивать бесчисленное количество часов на наращивание производства, есть еще варианты сделать это через API без ущерба для безопасности.

Во-первых, настаивайте на HTTPS, поскольку вам необходимо обеспечить безопасность данных на пути к API, а затем на пути к вам. Во-вторых, убедитесь, что вы выполняете POST-запрос вместо GET-запроса к API. Используя POST, вы просто передаете запрос URL с полезной нагрузкой, и единственный результат, который попадет в журнал сервера, - это тот факт, что запрос на проверку адреса и геокодирование был сделан в определенное время и с определенного IP-адреса. Ни представленный адрес, ни возвращенный адрес не будут сохранены на диске или записаны в журнал сервера. Это не становится намного более безопасным, чем это.

Таким образом, хотя локальная коробка определенно будет защищена, она может потребовать много усилий для разработки того, что вам нужно. Поскольку проблемы безопасности могут быть умиротворены, вы можете (снова) рассмотреть возможность использования API.

Я работаю в компании по проверке адресов, которая специализируется на безопасном геокодировании API - SmartyStreets .

Джеффри
источник
1

Старая тема, но стоит упомянуть об этом. http://www.tigergeocoder.com/ с использованием данных TIGER 2013, готовых к запуску собственного экземпляра сервера в облаке Amazon EC2.

Biba
источник
1

Настройте PostGIS Tiger Geocoder в вашей локальной системе Linux. Это определенно более громоздко, чем онлайн-API, но, возможно, лучший вариант для вашей ситуации. И это может масштабироваться до миллионов адресов, если это необходимо.

С помощью ansible playbook настроить сервер в linux намного проще, чем раньше. Написание SQL-запросов, вероятно, займет больше времени, если вы не знакомы с SQL или PostGIS.

Вы можете проверить мои настройки системы и мой скрипт для более подробной информации. Он должен включать всю необходимую вам информацию.

dracodoc
источник