Мне любопытно, как работает геокодер 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, чтобы создать этот пример.
В приведенном выше примере, улица сегмент интереса (Шеффера Хиллз Д-р) имеет от узла, который начинается при 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 намёки
- Область интересов габаритный ящик (смотри пример Павла).
- Другие?
I suspec t с точной информацией не сможет ответить на ваш вопрос, не нарушая соглашение о конфиденциальности. –
вам может быть повезло, задав этот вопрос здесь: http://gis.stackexchange.com/ –
@Suvi Я знаю о gis.stackexchange. Тем не менее, этот форум имеет на порядок больше глаз, и я надеялся, что это может: -/ – rburhum