Массовый геокод 20 миллионов адресов США

34

Существуют ли какие-либо бесплатные или недорогие базы данных для США, в которых можно искать и возвращать информацию о широте и долготе?

Крис Мюнх
источник
Быстро это хорошо, но точность это все. - Wyatt Earp При работе с геокодером есть некоторые (например, те, на которые ссылается эта тема), которые предлагают низкую цену для геокодирования многих адресов, но если вы ищете очень точную точность во многих различных областях, вам нужно пойти с премиальный геокодер. Результаты будут более последовательными и необычайно точными, особенно когда почтовое совпадение не происходит. Там не так много , вы можете конкурировать с , когда речь идет о наиболее точной геокодирования, в противном случае ваши расчеты не будет до бара с другими технологиями , предлагая пользователям т
2
Вы предлагаете свое мнение о необходимости высокого качества, но без предложений. Пожалуйста, предоставьте некоторые из ваших предложений, в противном случае это не поможет ответить на вопрос пользователей.
RyanDalton

Ответы:

30

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

Таким образом, ваш вариант становится запускать его локально, и для этого у вас есть несколько коммерческих или бесплатных вариантов.

Бесплатные опции будут использовать набор данных TIGER переписи, который вам нужно будет загрузить в пространственную базу данных. Вы можете найти библиотеки, которые геокодируют против TIGER для PostGIS или даже sqlite . Черт возьми, вы даже можете использовать ArcGIS для геокодирования против TIGER. Конечно, ArcGIS не бесплатна, что подводит меня к следующим коммерческим вариантам. Если у вас есть лицензия ArcGIS, у вас есть DVD-диск StreetMap с TeleAtlas ( я имею в виду Tom Tom ) или набор данных Navteq. Это зависит от того, есть ли у вас пакет StreetMap Premium . Любой из этих двух наборов данных, вероятно, даст вам более согласованные результаты, чем TIGER.

Сделайте себе одолжение и сделайте несколько копий уличной базы данных после загрузки ваших данных и запустите процесс геокодирования на нескольких машинах с подмножеством входных данных. Не пытайтесь запускать его только на одной машине, иначе вы будете ждать несколько дней, пока он не завершится, не говоря уже о том, что, скорее всего, любой запущенный вами процесс, вероятно, приведет к утечке памяти и падению несколько раз, прежде чем завершится. Это означает, что вы хотите иметь разные контрольные точки для вашего процесса.

Раги Язер Бурхум
источник
2
Я нашел полезным разделить входные и адресные данные на более мелкие части (например, состояния). Это ускоряет использование локаторов и снижает вероятность блокировки процессов после слишком долгого запуска. Как правило, не так уж сложно написать сценарий на основе состояния, чтобы выполнить создание локатора и геокодирование одним махом.
Натан
26

Я работаю на SmartyStreets (компания по проверке адресов). Наш сервис бесплатный для всех (до базового уровня). Стартапы также могут запросить использование нашего сервиса совершенно бесплатно в течение первого года. Так что, если вы соответствуете этой классификации, за наш неограниченный сервис в течение года бесплатно.

Ragi не рекомендует веб-сервис, однако наш API может легко очистить, стандартизировать и геокодировать 20 миллионов адресов для вас примерно за 5 часов (примерно 1000 в секунду). Некоторое время будет зависеть от скорости вашей машины (сколько у вас ядер) и вашего сетевого соединения (не пробуйте через 3G, но стандартное широкополосное соединение подойдет).

Просто хотел отметить, что это, безусловно, возможно с веб-сервисом.

Обновление: с 1 августа 2016 года я удаленно протестировал наш веб-сервис и получил 70 000 обращений в секунду, используя только один MacBook Pro 2015 года в беспроводной сети. Да, это довольно быстро. Это означает, что небольшой список, например 20 миллионов адресов, займет всего около 5 минут.

Джеффри
источник
2
Что ж, если вы собираетесь разрешить ему геокодировать 20 миллионов записей без начисления десяти центов и обрабатывать 1000 запросов в секунду (что очень впечатляет), то, конечно, это лучшее решение, чем создание собственного стека с нуля.
Раги Язер Бурхум
1
Абсолютно. 1000 / сек не макс. Это просто хороший стандарт. Многопоточность, несколько ядер и более быстрые сетевые соединения могут даже увеличить эту пропускную способность. У нас недавно появился некоммерческий клиент, который только что воспользовался нашим сервисом для обработки 180 миллионов адресов. С приближением национальных выборов многие группы пытаются очистить и геокодировать свои адреса.
Джеффри
1
@RagiYaserBurhum Обратите внимание, что Крис также ищет «разумные» решения. Конечно, создание собственного стека с нуля может быть «бесплатным», но действительно ли это, если учесть ваши альтернативные издержки? Выгода, которую вы получаете, делая все это самостоятельно: потенциально без затрат («бесплатно»). Преимущество использования существующего сервиса: экономия многих часов и часов. Кроме того, в наши дни, вероятно, для современных веб-архитектур (распараллеливание) приходится обрабатывать тысячи запросов в секунду, чтобы справляться с постоянной нагрузкой трафика. В конце концов, я думаю, что в данном случае «бесплатные» и «по разумным ценам» являются вопросом предпочтения.
Мэтт
1
@Matt Руки вниз "бесплатно" не всегда бесплатны. Я не буду спорить с этим (ваше время стоит денег). Мне хорошо известно, что стоимость большинства решений с открытым исходным кодом на самом деле представляет собой перенос модели затрат с лицензий на использование на службы поддержки. Я не пытался быть ироничным, я думаю , что если Jeffey может предложить решение бесплатно (или даже по разумным ценам) для этого является лучшим решением. По лучшей цене, указанной SmartyStreets, 20 миллионов очков обойдутся в 100 000 долларов. Я уверен, что даже для коммерческих случаев использования они могут составить небольшую часть стоимости.
Раги Язер Бурхум
1
Также 1000 / req в секунду, что очень выполнимо в современных архитектурах, все еще потребовало бы некоторого удивительного проектирования для геокодирования . Они получают мои реквизиты за это :)
Ragi Yaser Burhum
8

Я использовал это пошаговое руководство, описывающее, как построить постгисовый геокодер, используя данные 2010 TigerLine. Я запускаю его прямо сейчас - это не быстро, так как геокодирование 2 миллионов адресов займет 3 недели.

Тем не менее, он бесплатный, не подвергнутый регулированию, и потребовался кто-то с минимальными навыками кодирования и postgres менее чем за 2 дня, чтобы настроить и загрузить данные одного (большого) состояния, чтобы начать геокодирование. Я также полностью не настраивал postgres для системы, и она работает на монтировках NFS, поэтому я подозреваю, что прирост производительности может составить один-два порядка, если бы мне это понадобилось.

Вместо того, чтобы использовать веб-сервисы, я загрузил все свои адреса в базу данных postgres, а затем запускаю быстрый и грязный Perl-скрипт для геокодирования их всех по одному:

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 

(разрывы строк исключительно для удобства чтения)

Таким образом, генерируется «геокодировать адрес с этим значением идентификатора и использовать оператор наилучшего соответствия», и направляет его в psql, чтобы сделать это. Он только пытается геокодировать адрес без рейтинга - то есть, он еще не геокодирован. Так что это перезапускается, и каждый делается независимо.

Адам Муш
источник
Нашли ли вы данные TigerLine за 2010 год неточными для некоторых адресов?
Крис Мюнх
Это не идеальные данные в любом случае; однако адресные данные, которые я имею, являются септическими с точки зрения качества. Геокодер, как написано, предоставляет поле «рейтинг», где чем ниже, тем лучше. Я добавлю пример к моему ответу.
Адам Муш
@ChrisMuench: Если вы дадите мне один или два калифорнийских адреса, я был бы рад снять их через мой геокодер, чтобы показать вам - таким образом, я их не выбираю.
Адам Муш
Ну, я попробовал геокодер postgis для какого-то адреса в Нью-Йорке, и они могли быть на расстоянии от 500 футов до 1 мили
Крис Муенч
Это слишком поздно для вас, но кто-то еще может найти это полезным ... Убедитесь, что ваш адрес хорошо разбирается. Я обнаружил, что моя конкатенированная равнина "123 Oak St. Anytown ST 12345" была ускорена в 550 раз, когда я добавил запятые: "123 Oak St., Anytown, ST, 12345"
aaryno
3

Я предполагаю, что вы хотите геокодировать, но ничего не платите за это? Существует множество сервисов, на которых вы можете геокодировать 20 миллионов записей, но это будет стоить вам. Esri, Pitney Bowes и другие предлагают эти услуги по подписке или по стоимости за геокодирование. 20 миллионов не тривиально, но я предполагаю, что для этого есть экономическое обоснование.

Джеймс Фи
источник
3

Этот пост, вероятно, слишком поздно, чтобы помочь оригинальному постеру. Тем не менее, для тех, кто ищет бесплатную привязку больших объемов данных, вы можете воспользоваться моим программным обеспечением «Easy Georeferencer», которое создано независимо, легко в использовании и в то же время мощно (см. Скриншот внизу поста).

Программа проста и понятна в использовании и запускается непосредственно из исполняемого файла, не требующего установки. Вы можете выбрать геокодирование между источником данных GNS или GeoNames, и вы можете делать то, что пока не может делать ни один другой геокодер, геокодировать провинции на основе базы данных административных единиц GADM, а также геокодировать исторические границы стран из набора данных CShapes. Единственное предостережение в том, что он не геокодирует адресные данные. Все выходные данные представлены в виде шейп-файлов, готовых к немедленной визуализации / анализу в ГИС.

Что касается эффективности и обработки больших данных, программа была протестирована для геокодирования 100 000 записей всего за 3 часа. Для больших наборов данных ожидаемое увеличение времени обработки должно уменьшаться криволинейно, потому что большая часть времени обработки уходит только на начальную фазу, когда загружаются эталонные наборы данных по стране, но происходит после этого. Кроме того, при геокодировании больших наборов данных не нужно беспокоиться о узких местах в Интернете или проблемах с подключением, поскольку все программное обеспечение, эталонные наборы данных и обработка основаны на локальном компьютере. Частота совпадений может достигать 80-90 процентов, поскольку она основана на нечетком сопоставлении имен с учетом различий в правописании.

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

Программное обеспечение можно загрузить с: http://geocodeanything.wordpress.com/

Надеюсь, это поможет.

введите описание изображения здесь

Карим Бахгат
источник
Вы должны всегда раскрывать, кто является автором / разработчиком и / или работает в компании, которая производит программный продукт.
RyanDalton
@RyanDalton Я раскрыл, что был автором, когда писал «созданное мной программное обеспечение», хотя я вижу, как оно могло остаться незамеченным, поскольку в предложении ему не уделялось особого внимания. Изменили мою формулировку, чтобы, надеюсь, стало понятнее, что я потворствую своему собственному программному обеспечению.
Карим Бахгат
2

Поскольку вы будете геокодировать адреса в США, я думаю, что инструмент Street Address to Coordinates из Data Science Toolkit должен хорошо работать для вас.

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.

Возможно, вы захотите загрузить виртуальную машину и запустить ее с вашего собственного оборудования. Таким образом, вам не нужно беспокоиться об ограничениях API, плюс вы тоже управляете им. Ох, и я сказал, что это бесплатно? ;-)

RK
источник
Это довольно удивительно! Я удивлен, что никогда не слышал об этом раньше. Кроме того, замечательно, что вы можете загрузить виртуальную машину и подготовить ее к запуску на своей собственной системе.
RyanDalton
Это тоже открытый исходный код. :) github.com/petewarden/dstk
RK
2

Я не видел никаких ссылок на уровень точности, который вам нужен, но я предполагаю, что вы хотите, чтобы крыша была длинной или близкой к ней. Качество входного адреса также может быть фактором. Хорошо очищенный список адресов будет кодироваться лучше и быстрее, чем список неполных или неверных адресов. Кроме того, приемлема ли вероятность попадания в 90% или вам нужны все 20 миллионов адресов? У меня нет бесплатного решения, но есть относительно недорогое решение, которое я знаю и использую. ZP4 от Semaphore Corp, http://www.semaphorecorp.com/предлагает адресный очиститель / геокодер и дополнения, которые будут обрабатывать адреса и возвращать очищенный адрес, флаг, который указывает, является ли адрес доставляемым USPS, и длинный лат для ZIP + 4. Точность ZIP + 4 обычно близка к точности на крыше в застроенных районах (на правильной стороне улицы и в правильном блоке), а не в сельской местности. Стоимость лицензии на 30 дней составляет 120 долларов. По истечении этого времени очиститель адресов все еще будет функционировать, но проверка точки доставки (DPV) и геозвонки не будут работать. С относительно быстрым компьютером, построенным за последние два года, и всеми данными, хранящимися и доступными локально, 20 миллионов записей должны быть выполнены примерно за 10 дней. Последние 15 лет я занимался геокодированием адресов, и большую часть этого времени я пользовался ZP4. Прежде чем они предложили лонг-лат или DPV,

ktreiche
источник
2

Я сейчас геокодирую 18 миллионов адресов, поэтому хочу поделиться своими настройками.

В основном я использовал ANSIBLE PlayBook, чтобы настроить экземпляр Amazon EC2 в качестве сервера PostGIS Tiger Geocoder, а затем использовать сценарий для пакетной обработки адресов геокодов, сопоставления их с блоком переписи.

Стоимость Amazon EC2: минимальное требование 180G SSD стоит около 18 долларов в месяц. Мой экземпляр t2.large стоит всего около $ 90 / месяц.

Если у вас есть linux box с SSD> 180G, вы также можете использовать его в основном бесплатно.

Моя средняя производительность составляет около 170 ~ 300 мс / адрес хорошего качества, 400 ~ 600 мс / адрес плохого качества. Под плохим качеством я подразумеваю, что многие из них имеют отсутствующий или неправильный город, почтовый индекс или даже просто неправильный адрес. Этот тип адреса занимает гораздо больше времени для геокодирования, поэтому ваша производительность зависит от качества ввода. Используемый мной экземпляр Amazon EC2 может геокодировать около 4 миллионов действительно плохо отформатированных адресов за один месяц.

Для получения более подробной информации, смотрите мой пост в блоге о настройке системы и скриптах

dracodoc
источник
1

Если ваш рабочий процесс в Python, геопсия - отличное решение. Вы можете написать свою базовую логику геокодирования абстрактно, а затем выбрать одного из множества провайдеров (ArcGIS, Baidu, Bing, DataBC, GeocodeFarm, GoecoderDotUS, GeoNames, Google, IGN Франция, LiveAddress, NaviData, Nominatim (OSM), OpenCage, OpenMapQuest, Yahoo! BOSS Place Finder, What3Words, Яндекс ... тьфу). Вы можете даже использовать все из них и в конечном итоге выбрать точку, которая с наибольшей степенью достоверности является правильной благодаря проверке несколькими службами геокодирования. Многие из этих сервисов требуют регистрации (но не все). Они могут не одинаково подходить для использования в США, но преимущество использования этой функции с аккуратной функцией Python состоит в том, что вы должны иметь возможность контролировать это.

Вот короткий пример:

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/

На самом деле единственная сложная задача - убедиться, что ваши адреса не сформированы должным образом. Однако, вероятно, все еще потребуется значительное время для геокодирования 20 миллионов местоположений ... и такая нагрузка, вероятно, нарушит чьи-то условия обслуживания. Надеюсь, это кому-то поможет.

alphabetasoup
источник
Могу ли я использовать CSV с этим?
Салман
Конечно, если вы читаете это с Python.
alphabetasoup
0

если ваш запрос геокодирования не превышает 2500 в день, вы можете использовать API геокодирования Google . Вы должны взглянуть на API, он может вернуться к результатам в виде JSON или XML.

Предел использования:

Использование API геокодирования Google ограничивается 2500 запросами геолокации в день. (Пользователь API Карт Google для бизнеса может выполнять до 100 000 запросов в день.)

Пример:

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

Пример результата:

{
  "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 ]
    }
  } ]
}

и вы можете проверить пример ссылки для геокодирования из Google:

1. Единый код

2. Обратное геокодирование

3. Начиная с Google GeoCoding

я надеюсь это поможет тебе

Арагон
источник
15
Это займет всего около 22 лет (8000 дней), чтобы геокодировать 20 миллионов мест. Абсолютно разумное решение.
Энди Вт
я знаю это, и я выразил мнение, что если его запрос геокодирования не превышает 2500 в день, он может использовать его ... это вариант, если он не может найти какое-либо решение
Арагон
4
Это нарушает условия обслуживания. Это незаконно, если вы не отображаете результаты на карте Google. Даже если вы это сделаете, я нахожу «аргумент кеширования», который некоторые люди используют немного для 20 миллионов функций!
Раги Язер Бурхум