Мне любопытно, как работает геокодер 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, чтобы создать этот пример.
В приведенном выше примере интересующий сегмент улицы (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 как подсказки
- Область ограниченного интереса (см. пример Пола).
- Другие?