Геокодирование 5000 адресов в php-скрипте

Я хочу геокодировать более 5000 адресов одновременно в PHP-скрипте (это будет выполняться только один раз).

Я рассматривал Google как потенциальный ресурс для выполнения именно этого, однако я читал отчеты о том, что после выполнения 200 или около того запросов через них Google выкинет вас на день.

Мне просто интересно, есть ли какой-либо другой способ геокодирования 5000 или около того адресов, другой сервис, такой как предложения Google, или что-то подобное, которое я мог бы использовать?

Или мне просто придется поколебать это? Проблема в том, что у меня действительно не так много времени, и чтобы делать 200 или 300 в день для получения 5000 результатов, потребуется почти 5 (рабочих) недель.

Спасибо

Том


person Thomas Clayson    schedule 13.10.2010    source источник
comment
Вы готовы платить за это?   -  person Georg Schölly    schedule 13.10.2010


Ответы (5)


Вместо этого вы можете использовать Bing Maps: API пространственных данных создан для пакетной обработки. одновременное геокодирование тысяч адресов (эта ссылка даже является подробным руководством о том, как использовать его с PHP).

Вам просто нужно зарегистрировать ключ на http://www.bingmapsportal.com, но это бесплатно и быстро (вы получаете электронное письмо с подтверждением в течение нескольких минут).

person wildpeaks    schedule 13.10.2010

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

Если с одного IP-адреса получено более 2500 запросов геокодирования в течение 24 часов или запросы геокодирования отправляются с одного IP-адреса слишком быстро, геокодер Google Maps API начнет отвечать с кодом состояния 620.

[...]

Если вам нужно отправить очень большой набор адресов в веб-службу геокодирования для кэширования для последующего использования, вам следует рассмотреть Google Maps API Premier, который предоставляет для этой цели отдельную квоту пакетного геокодирования.

-- http://code.google.com/apis/maps/faq.html#geocoder_limit

Как упоминал @Pekka: обратите внимание, что условия обслуживания Google запрещают геокодирование для целей, отличных от отображения на карте.

person Bart Kiers    schedule 13.10.2010
comment
+1 Обратите внимание, что условия обслуживания Google запрещают геокодирование для целей, отличных от отображения на карте. - person Pekka; 13.10.2010
comment
Не то чтобы это действительно было принудительно, теперь, когда им даже больше не требуется ключ API. Но как компания, я бы дважды подумал, прежде чем делать это в больших масштабах. - person Pekka; 13.10.2010
comment
они будут показаны на карте — в приложении для iphone — а широта и долгота будут использоваться, чтобы направлять людей к картам Google, чтобы узнать, как проехать и тому подобное. все логотипы и товарные знаки Google показаны и соблюдаются, и все TOS соблюдаются. Что интересно в FAQ, однако он будет делать все расчеты на высокой скорости. Я мог бы добавить sleep(1) в свой скрипт, чтобы немного распределить запросы, но мне нужно гарантировать, что результаты будут геокодированы. - person Thomas Clayson; 13.10.2010

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

http://www.google.de/search?q=геолокация+базаданных&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox#hl=en&expIds=17259,17315,18168,23628,25646,25834,26637,26746,26761,26849&xhr=t&q=геолокация+базаданных+загрузка&cp=22&pf=p&sclient=psy&client=firefox&hs=MvK&rls=org.mozilla:ru%3Aofficial&source=hp&aq&aq&aqi=f&aqi==geolocation+database+d&gs_rfai=&pbx=1&fp=d950b79c3319a56e

person BarsMonster    schedule 13.10.2010
comment
хорошая идея, будут ли они точными? По первому результату по вашей ссылке я увидел, что даже платный будет точен только на 80%. Это нормально? - person Thomas Clayson; 13.10.2010
comment
@Thomas Clayson: Да, это нормально; идеальной точности от геолокации Google тоже не будет. Хорошей новостью является то, что большинство поисковых запросов более точны, чем это — другими словами, на число сильно влияют точки из ниоткуда, которые вам редко нужно искать. - person Piskvor left the building; 13.10.2010

Как говорит @Bart Kiers, существует ограничение на количество запросов, которые вы можете сделать в течение 24 часов; есть также «не слишком быстрое» ограничение в час (?). Я бы посоветовал вам разделить (секунд в день) 86400/2500 (предел), чтобы получить скорость запросов, которая не должна превышать «слишком быстро» в час. Получается примерно один запрос за 35 секунд, что должно дать вам результаты через два дня.

Тем не менее, проверьте коды возврата: если сервис начинает возвращать 620, остановитесь и дайте ему отдохнуть некоторое время, иначе вы рискуете получить бан.

person Piskvor left the building    schedule 13.10.2010

То, что вы пытаетесь сделать, действительно не соответствует условиям обслуживания Google.

Тем не менее, Google начнет возвращать ответы о превышении квоты, если вы не сделаете паузу не менее 250 мс между запросами геокодирования.

На практике, если вы делаете только 2 запроса в секунду, вы не будете ограничены до предела в 2500 дней.

person smirkingman    schedule 13.10.2010
comment
Если они геокодируют для показа на GMaps (не просматривая каждый раз), они вполне могут быть в рамках ToS. Без более подробной информации трудно сказать. - person Piskvor left the building; 13.10.2010
comment
деталь в том, что у нас есть список конкретных бизнес-листингов, которые нам нужно искать. использование локального API Google не будет работать, это только в пределах этого подмножества из примерно 5 тысяч компаний, которые мы хотим найти. Приложение отображает их на карте Google с отметками в координатах широта/долгота, чтобы показать, где они находятся. единственная причина, по которой нам нужно хранить широту/долготу, - это вычисление расстояния. Устройство получит местоположение пользователя через GPS, и нам нужно вернуть ближайшие 10 или 20 результатов. Насколько я знаю, это находится в рамках TOS, и в этом нет ничего сомнительного. - person Thomas Clayson; 13.10.2010
comment
Итак, ваша задача состоит в том, чтобы раз и навсегда геокодировать 5000 предприятий, чтобы узнать, где они находятся? Вы можете сделать это, как я предложил (я сделал это), но это займет пару дней, чтобы сделать 5'000. Если вы получаете их от Google, то TOS не позволяет вам их хранить, даже если это одноразовая вещь. Опять же, я не пытаюсь сказать вам, что делать, просто обращаю ваше внимание на то, что я теоретически тоже не должен был делать :) Кстати, вот получившаяся страница www.calvert.ch/geodesix/offices.htm - person smirkingman; 13.10.2010