Как работает геокодер Google?

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

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

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

1.- нормализатор адресов, который принимает произвольную строку и нормализует ее (взяв пример отсюда):

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.- Геокодер, который выполняет магическое нечеткое согласование для имен, где основным алгоритмом является Расстояние Левенштейна.

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

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

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

street interpolation example

В приведенном выше примере интересующий сегмент улицы (Schaeffer Hills Dr) имеет от node, который начинается с 300 (так 300 Schaeffer Hills Dr) и до node, который заканчивается на 400 (400 Schaeffer Hills Drv). Если бы я подошел к этому Schaeffer Hills Drv, и запрос был для улицы 310, тогда алгоритм выполнил бы интерполяцию (пройдя 10% от этого) туда, где мой зеленый стрелка.

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

Как это так?

Например, я могу набрать 680 Mission st (нет города, штата, уезда, вообще ничего). Большинство нормальных нормализаторов адресов взорвутся, потому что они найдут слишком много матчей. Но поскольку я нахожусь в SF, я угадываю Google использует мой ip для получения геоинформационной информации , делает некоторое расширяющееся ограничение в качестве подсказки с некоторым нечетким поиском, и сразу же находит ближайший сегмент, который соответствует и говорит мне, что мой ответ (что правильно!).

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

Update:

ОК, до сих пор мы указали два вида подсказок:

  • Geoip как подсказки
  • Область ограниченного интереса (см. пример Пола).
  • Другие?

Ответ 1

Одна из вещей, которую вы можете найти, высунув черный ящик, заключается в том, что геокодер 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.

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

Ответ 2

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

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

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