Существуют ли какие-либо бесплатные или недорогие базы данных для США, в которых можно искать и возвращать информацию о широте и долготе?
Существуют ли какие-либо бесплатные или недорогие базы данных для США, в которых можно искать и возвращать информацию о широте и долготе?
Ответы:
Для такого количества записей даже не рассматривайте веб-сервис. Они задушат или обрежут вас, прежде чем вы сможете закончить свою задачу.
Таким образом, ваш вариант становится запускать его локально, и для этого у вас есть несколько коммерческих или бесплатных вариантов.
Бесплатные опции будут использовать набор данных TIGER переписи, который вам нужно будет загрузить в пространственную базу данных. Вы можете найти библиотеки, которые геокодируют против TIGER для PostGIS или даже sqlite . Черт возьми, вы даже можете использовать ArcGIS для геокодирования против TIGER. Конечно, ArcGIS не бесплатна, что подводит меня к следующим коммерческим вариантам. Если у вас есть лицензия ArcGIS, у вас есть DVD-диск StreetMap с TeleAtlas ( я имею в виду Tom Tom ) или набор данных Navteq. Это зависит от того, есть ли у вас пакет StreetMap Premium . Любой из этих двух наборов данных, вероятно, даст вам более согласованные результаты, чем TIGER.
Сделайте себе одолжение и сделайте несколько копий уличной базы данных после загрузки ваших данных и запустите процесс геокодирования на нескольких машинах с подмножеством входных данных. Не пытайтесь запускать его только на одной машине, иначе вы будете ждать несколько дней, пока он не завершится, не говоря уже о том, что, скорее всего, любой запущенный вами процесс, вероятно, приведет к утечке памяти и падению несколько раз, прежде чем завершится. Это означает, что вы хотите иметь разные контрольные точки для вашего процесса.
Я работаю на SmartyStreets (компания по проверке адресов). Наш сервис бесплатный для всех (до базового уровня). Стартапы также могут запросить использование нашего сервиса совершенно бесплатно в течение первого года. Так что, если вы соответствуете этой классификации, за наш неограниченный сервис в течение года бесплатно.
Ragi не рекомендует веб-сервис, однако наш API может легко очистить, стандартизировать и геокодировать 20 миллионов адресов для вас примерно за 5 часов (примерно 1000 в секунду). Некоторое время будет зависеть от скорости вашей машины (сколько у вас ядер) и вашего сетевого соединения (не пробуйте через 3G, но стандартное широкополосное соединение подойдет).
Просто хотел отметить, что это, безусловно, возможно с веб-сервисом.
Обновление: с 1 августа 2016 года я удаленно протестировал наш веб-сервис и получил 70 000 обращений в секунду, используя только один MacBook Pro 2015 года в беспроводной сети. Да, это довольно быстро. Это означает, что небольшой список, например 20 миллионов адресов, займет всего около 5 минут.
Я использовал это пошаговое руководство, описывающее, как построить постгисовый геокодер, используя данные 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, чтобы сделать это. Он только пытается геокодировать адрес без рейтинга - то есть, он еще не геокодирован. Так что это перезапускается, и каждый делается независимо.
Я предполагаю, что вы хотите геокодировать, но ничего не платите за это? Существует множество сервисов, на которых вы можете геокодировать 20 миллионов записей, но это будет стоить вам. Esri, Pitney Bowes и другие предлагают эти услуги по подписке или по стоимости за геокодирование. 20 миллионов не тривиально, но я предполагаю, что для этого есть экономическое обоснование.
Расположение ваших данных очень важно, потому что качество веб-сервисов меняется (точность, масштаб и т. Д.). Я геокодирую свой адрес из API Google, API API и ex-simplegeo с моей базой геоданных.
http://blog.programmableweb.com/2012/06/21/7-free-geocoding-apis-google-bing-yahoo-and-mapquest/
Этот пост, вероятно, слишком поздно, чтобы помочь оригинальному постеру. Тем не менее, для тех, кто ищет бесплатную привязку больших объемов данных, вы можете воспользоваться моим программным обеспечением «Easy Georeferencer», которое создано независимо, легко в использовании и в то же время мощно (см. Скриншот внизу поста).
Программа проста и понятна в использовании и запускается непосредственно из исполняемого файла, не требующего установки. Вы можете выбрать геокодирование между источником данных GNS или GeoNames, и вы можете делать то, что пока не может делать ни один другой геокодер, геокодировать провинции на основе базы данных административных единиц GADM, а также геокодировать исторические границы стран из набора данных CShapes. Единственное предостережение в том, что он не геокодирует адресные данные. Все выходные данные представлены в виде шейп-файлов, готовых к немедленной визуализации / анализу в ГИС.
Что касается эффективности и обработки больших данных, программа была протестирована для геокодирования 100 000 записей всего за 3 часа. Для больших наборов данных ожидаемое увеличение времени обработки должно уменьшаться криволинейно, потому что большая часть времени обработки уходит только на начальную фазу, когда загружаются эталонные наборы данных по стране, но происходит после этого. Кроме того, при геокодировании больших наборов данных не нужно беспокоиться о узких местах в Интернете или проблемах с подключением, поскольку все программное обеспечение, эталонные наборы данных и обработка основаны на локальном компьютере. Частота совпадений может достигать 80-90 процентов, поскольку она основана на нечетком сопоставлении имен с учетом различий в правописании.
Более подробная информация, в том числе вводный документ и руководство для начинающих, включены в пакет загрузки. Не нужно сомневаться в том, чтобы попробовать это, программа представляет собой простой файл, который вы можете разместить и запустить на своем рабочем столе без каких-либо обязательств или беспорядка вашего компьютера.
Программное обеспечение можно загрузить с: http://geocodeanything.wordpress.com/
Надеюсь, это поможет.
Поскольку вы будете геокодировать адреса в США, я думаю, что инструмент 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, плюс вы тоже управляете им. Ох, и я сказал, что это бесплатно? ;-)
Я не видел никаких ссылок на уровень точности, который вам нужен, но я предполагаю, что вы хотите, чтобы крыша была длинной или близкой к ней. Качество входного адреса также может быть фактором. Хорошо очищенный список адресов будет кодироваться лучше и быстрее, чем список неполных или неверных адресов. Кроме того, приемлема ли вероятность попадания в 90% или вам нужны все 20 миллионов адресов? У меня нет бесплатного решения, но есть относительно недорогое решение, которое я знаю и использую. ZP4 от Semaphore Corp, http://www.semaphorecorp.com/предлагает адресный очиститель / геокодер и дополнения, которые будут обрабатывать адреса и возвращать очищенный адрес, флаг, который указывает, является ли адрес доставляемым USPS, и длинный лат для ZIP + 4. Точность ZIP + 4 обычно близка к точности на крыше в застроенных районах (на правильной стороне улицы и в правильном блоке), а не в сельской местности. Стоимость лицензии на 30 дней составляет 120 долларов. По истечении этого времени очиститель адресов все еще будет функционировать, но проверка точки доставки (DPV) и геозвонки не будут работать. С относительно быстрым компьютером, построенным за последние два года, и всеми данными, хранящимися и доступными локально, 20 миллионов записей должны быть выполнены примерно за 10 дней. Последние 15 лет я занимался геокодированием адресов, и большую часть этого времени я пользовался ZP4. Прежде чем они предложили лонг-лат или DPV,
Я сейчас геокодирую 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 миллионов действительно плохо отформатированных адресов за один месяц.
Для получения более подробной информации, смотрите мой пост в блоге о настройке системы и скриптах
В настоящее время в AWS доступно несколько серверов геокодирования. Получите свой собственный сервер и скопируйте туда свои данные. https://aws.amazon.com/marketplace/search/results/ref=dtl_navgno_search_box?page=1&searchTerms=geocode
Если ваш рабочий процесс в 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 миллионов местоположений ... и такая нагрузка, вероятно, нарушит чьи-то условия обслуживания. Надеюсь, это кому-то поможет.
если ваш запрос геокодирования не превышает 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:
я надеюсь это поможет тебе