2012-06-12 4 views
14

Мне любопытно, как работает геокодер Google.Как работает геокодер Google?

Я изучаю некоторые варианты геокодеров с открытым исходным кодом, например geocommons' geocoder или PostGIS's new Tiger Geocoder. Это примерно то, что я знаю до сих пор (надеюсь, докажу, что я делал домашнее задание):

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

1.- адрес нормализатор, который принимает произвольную строку и нормализует его (taking the example from here):

normalize_address('address string'); 

e.g.: SELECT naddy.* FROM normalize_address('29645 7th Street SW Federal Way 98023') AS naddy; 

address | predirabbrev |  streetname  | streettypeabbrev | postdirabbrev | internal | location | stateabbrev | zip | parsed 
---------+-------------+-----------------------+------------------+---------------+----------+----------+-------------+-------+-------- 
29645 |    | 7th Street SW Federal | Way    |    |   |   |    | 98023 | 

и:

2.- геокодера, что делает некоторые магические нечеткого соответствия для имен где основным алгоритмом является Levenshtein Distance.

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

kitten → sitten (substitution of 's' for 'k') 
sitten → sittin (substitution of 'i' for 'e') 
sittin → sitting (insertion of 'g' at the end). 

3.- Некоторая интерполяция уличных сегментов в конце, чтобы догадаться, где находится дом. Я написал кусок бесплатного Census Tiger street dataset, чтобы создать этот пример.

street interpolation example

В приведенном выше примере, улица сегмент интереса (Шеффера Хиллз Д-р) имеет от узла, который начинается при 300 (так 300 Шеффера Хиллз Dr) и к узлу, который заканчивается на 400 (400 Schaeffer Hills Drv). Если бы я подошел к этому Schaeffer Hills Drv, и запрос был для улицы 310, тогда алгоритм должен был бы только interpolate (пересечь 10% от него) туда, где находится моя зеленая стрелка.

Это то, что делают инструменты геокодирования с открытым исходным кодом. Тем не менее, Google явно умнее этого и использует всевозможные нетрадиционные намеки.

Как это сделать?

Например, я могу набрать 680 Mission st (нет города, штата, уезда, ничего). Большинство нормальных нормализаторов адресов взорвутся, потому что они найдут слишком много матчей. Но так как я нахожусь в SF, я угадываю google использует мой ip для получения geoip-like information, делает some expanding bounding как подсказку с некоторым нечетким поиском, и сразу же находит ближайший сегмент, который соответствует и говорит мне, что это мой ответ (что верно !).

Я ищу ответы, которые могут пролить свет на то, как работает геокодер Google, помимо тех методов, которые я описал выше.

Update:

ОК, до сих пор мы имеем два вида подсказок перечислены

  • Geoip намёки
  • Область интересов габаритный ящик (смотри пример Павла).
  • Другие?
+3

I suspec t с точной информацией не сможет ответить на ваш вопрос, не нарушая соглашение о конфиденциальности. –

+0

вам может быть повезло, задав этот вопрос здесь: http://gis.stackexchange.com/ –

+0

@Suvi Я знаю о gis.stackexchange. Тем не менее, этот форум имеет на порядок больше глаз, и я надеялся, что это может: -/ – rburhum

ответ

6

Одна из вещей, которые вы можете найти, выталкивая в черный ящик, заключается в том, что геокодер Google не полностью чувствителен к порядку жетонов (нет ожидаемого ожидания улицы/города/штата/страны, хотя оно лучше когда вы это следуете). Который говорит мне, что они могут сбросить все в какой-то полноценный текстовый поиск, а затем посмотреть, что вернется. Или, возможно, нет. Попробуйте найти «sault saint marie adams 200» и «sault saint marie 200 adams».

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

Query with map window over Europe: European results.

запрос с окном карты по всей Европе: европейские результаты

Query with map window over North America: American results.

запрос с картой окна над Северной Америке: американские результаты

4

Существует еще один источник данных: карты собственности округа. Это не просто дороги, но и линии собственности (и их уличные адреса). Вы можете часто видеть это на карте Google, на самом деле будут отображаться слабые линии, которые разделяют смежные свойства. Иногда они даже выделяют здания (карты графств часто включают их тоже).

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

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

+0

Обратное геокодирование - гораздо более простая проблема. Просто получите lat/lon и привяжите к ближайшей функции (участок или уличный сегмент). Это поднимает тему функций Parcel, которые являются еще одним источником данных для геокодирования. Процесс для * традиционного * геокода против них очень похож на подход сегмента улиц. Так что мой вопрос по-прежнему остается без ответа :(Спасибо за указание на это. – rburhum

+1

Спасибо за разъяснение моего ответа как неправильного, теперь он удален. Я подумал, что в Белой книге Google Geolocation также обсуждалась потенциальная инфраструктура, связанная с геокодированием, которая может как-то быть релевантной. будьте уверены, +1 за ваш ответ. – arttronics

Смежные вопросы