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


34

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


Швидкий - це добре, але точність - це все. - Wyatt Earp У роботі з геокодером є деякі (наприклад, один, на який посилається ця тема), які пропонують низьку ціну для геокодування багатьох адрес, але якщо ви шукаєте дуже точну точність у багатьох різних областях, вам потрібно піти з преміальний геокодер. Результати будуть більш послідовними та надзвичайно точними, особливо коли поштова відповідність не відбудеться. З найважливішим геокодування ви не можете змагатися проти того, що стосується найбільш точного геокодування, інакше ваші розрахунки не будуть відповідати іншим технологіям, що пропонують користувачам t

2
Ви пропонуєте свою думку про необхідність високої якості, але без пропозицій. Будь ласка, надайте деякі свої пропозиції, інакше це не допоможе відповісти на запитання користувачів.
RyanDalton

Відповіді:


30

Для такої кількості записів навіть не враховуйте веб-сервіс. Вони придушать або відріжуть вас, перш ніж ви зможете закінчити своє завдання.

Тоді ваш варіант стає запускати його локально, і для цього у вас є кілька комерційних або безкоштовних варіантів.

Безкоштовні параметри використовуватимуть набір даних TIGER перепису, який вам потрібно буде завантажити в просторову базу даних. Ви можете знайти бібліотеки, які геокодують проти TIGER для PostGIS або навіть sqlite . Чорт ви можете навіть використовувати ArcGIS для геокодування проти TIGER. Звичайно, ArcGIS не є безкоштовним, що підводить мене до наступних комерційних варіантів. Якщо у вас є ліцензія на ArcGIS, у вас є DVD StreetMap з набором даних TeleAtlas ( я маю на увазі Том Том ) або Navteq. Це залежить від наявності пакетів StreetMap Premium . Будь-який із цих двох наборів даних, ймовірно, дасть вам більш стійкі результати, ніж TIGER.

Зробіть собі послугу і зробіть кілька копій вуличної бази даних після завантаження ваших даних і запустіть процес геокодування на декількох машинах із підмножиною вхідних даних. Не намагайтеся запустити його лише на одній машині, інакше ви будете чекати днів, коли він закінчиться, не кажучи вже про те, що, швидше за все, будь-який процес, який ви запустите, він, ймовірно, просочиться пам’яттю і вийде з ладу кілька разів, перш ніж він закінчиться. Це означає, що ви хочете мати різні контрольні точки для свого процесу.


2
Я вважаю вигідним розділити вхідні та адресні дані на менші частини (наприклад, стани). Це робить локатори швидшими у використанні, а процеси ймовірніше блокуватися після занадто довгого запуску. Зазвичай не дуже складно сценарій циклу, що базується на державі, для створення локатора та геокодування одним махом.
Натанус

26

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

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

Просто хотів зазначити, що це, безумовно, можливо за допомогою веб-сервісу.

Оновлення: Станом на 1 серпня 2017 року я дистанційно перевіряв нашу веб-службу і отримував постійні 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

Я використав цей посібник, описуючи, як створити геокодер постгігів за допомогою даних TigerLine 2010 року. Я зараз запускаю це - це не швидко, оскільки для геокодування 2 мільйонів адрес потрібно три тижні.

Однак це безкоштовно, не закручене, і для того, щоб розпочати геокодування, хтось із мінімальними навичками кодування та розміщення пошти менше 2 днів налаштовує та завантажує дані одного (великого) стану. Я також не робив абсолютно ніякої налаштування постгресів для системи, і вона працює над монтажами 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

Я здогадуюсь, що ви хочете зробити Geocode, але нічого не заплатите за це? Є купа послуг, за допомогою яких можна геокодувати 20 мільйонів записів, але це обійдеться вам. Esri, Pitney Bowes та інші пропонують ці послуги за допомогою передплати або за ціну за x геокоди. 20 мільйонів не є дрібницею, але я припускаю, що для цього є ділова справа.



3

Це повідомлення, ймовірно, занадто пізно, щоб допомогти оригінальному афіші. Однак для тих, хто шукає геореференцію великої кількості даних безкоштовно, ви можете перевірити моє програмне забезпечення під назвою "Легкий геореференц", яке створено незалежно, просте у використанні та все ж потужне (див. Скріншот у нижній частині публікації).

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

Що стосується ефективності та обробки великих даних, то програма була перевірена на геокодування 100 000 записів лише за 3 години. Для більшої кількості наборів даних очікуване збільшення часу обробки повинно криво зменшитись, оскільки значна частина часу обробки йде лише на початкову фазу, коли завантажуються набори даних по країні, але згодом збільшується. Крім того, при геокодування великих наборів даних не потрібно турбуватися про проблеми із підключенням до Інтернету чи проблеми з підключенням до мережі, оскільки програмне забезпечення, референтні набори даних та обробка базуються на локальному комп'ютері. Коефіцієнт відповідності може доходити до 80-90 відсотків, оскільки він заснований на нечіткому зіставленні обліку для написання відмінностей у написанні.

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

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

Сподіваюся, що це допомагає.

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


Ви завжди повинні розкривати, хто є автором / розробником та / або працює для компанії, яка виробляє програмний продукт.
РайанДалтон

@RyanDalton Я розкрив, що я був автором, коли писав "програмне забезпечення, яке я створив", хоча я можу побачити, як це могло пройти непомітно, оскільки в реченні не було приділено великої уваги. Я змінив своє формулювання, сподіваюсь зрозуміти, що я вибачаю власне програмне забезпечення.
Карим Бахгат

2

Оскільки ви будете геокодувати американські адреси, я вважаю, що інструмент « Адреса вулиці до координат » з Інструментарію даних про наукові дані повинен добре працювати для вас.

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, а ви також керуєте ним. О, і я сказав, що це безкоштовно? ;-)


Це досить дивовижно! Я здивований, що ніколи раніше про це не чув. Плюс його чудово, що ви можете завантажити VM та мати його вже готовим до запуску у власній системі.
РайанДалтон

Він також є відкритим кодом. :) github.com/petewarden/dstk
RK

2

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


2

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

В основному я використовував аннульову книгу для встановлення екземпляра Amazon EC2 як сервер Geocoder PostGIS Tiger, а потім використовував сценарій для створення геокод-адрес, перенесення їх на блок перепису.

Вартість Amazon EC2: мінімальна вимога 180G SSD коштує близько 18 доларів на місяць. Загалом мій екземпляр t2.large коштував близько 90 доларів на місяць.

Якщо у вас є Linux-коробка з SSD> 180G, ви також можете використовувати її в основному безкоштовно.

Моя середня продуктивність становить приблизно 170 ~ 300 мс / адреса хорошої якості, 400 ~ 600 мс / адреса поганої якості. Я маю на увазі погану якість, я маю на увазі, що в багатьох з них відсутні місто або неправильний місто, поштовий індекс або навіть неправильна адреса. Цей тип адреси займає набагато більше часу для геокодування, тому ваша ефективність залежить від якості введеного даних. Використовуваний нами екземпляр Amazon EC2 може геокодувати близько 4 мільйонів дійсно поганих форматованих адрес за один місяць.

Детальніше дивіться у моєму дописі про налаштування системи та сценарії



1

Якщо ваш робочий процес знаходиться в Python, геопія - це чудове рішення. Ви можете записати свою основну логіку геокодування абстрактно, а потім вибрати один з багатьох постачальників (ArcGIS, Baidu, Bing, DataBC, GeocodeFarm, GoecoderDotUS, GeoNames, Google, IGN France, LiveAddress, NaviData, Nominatim (OSM), OpenCage, OpenMapQuest, Yahoo! BOSS Place Finder, What3Words, Yandex ... феу). Ви навіть можете використати їх і в кінцевому підсумку вибрати точку, яка має найвищу впевненість у правильності за допомогою перевірки кількома службами геокодування. Багато з цих служб потребують реєстрації (але не всі). Вони можуть бути не однаково придатні для використання в США, але користь від виконання акуратної функції 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 мільйонів локацій, однак ... і таке навантаження, ймовірно, порушить чиїсь умови обслуговування. Сподіваюся, що це комусь допомагає.


чи можу я використовувати з цим 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

Я сподіваюся, що це допоможе вам


15
Це займе лише близько 22 років (8000 днів), щоб геокодувати 20 мільйонів місць. Цілком розумне рішення.
Andy W

я знаю це, і я висловився, якщо його запит на геокод не перевищує 2500 в день, він може використовувати його ... це варіант, якщо він не може знайти якесь рішення
Арагон,

4
Це порушує умови надання послуг. Це незаконно, якщо ви не відображаєте результати на карті Google. Навіть якщо ви це робите, я знаходжу "аргумент кешування", який деякі користувачі трохи розтягують на 20 мільйонів функцій!
Рагі Ясер Бурхум
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.