Вот что я подумал:
1) Геокодируйте адрес на входе, сохраните широту / долготу. Когда пользователь выполняет поиск, геокодируйте адрес и сравнивайте широту и долготу, чтобы увидеть, есть ли у меня в базе данных именно эта широта и долгота.
Но с этим есть проблемы.
- Сохранение результатов Google Geocoder является нарушением условий их использования.
- Для этого есть веская причина; Google постоянно обновляет свои геокоды, поэтому широта и долгота адреса могут со временем меняться.
- Я бы проводил точное сравнение чисел с плавающей запятой, которое может быть неточным.
- А как насчет нескольких квартир в здании? У них у всех одинаковые широта и долгота, но это разные адреса.
2) Геокодируйте адрес при вводе, но не сохраняйте широту / долготу; сохраните компоненты адреса и сравните их.
Это кажется лучше, но проблемы все еще есть:
- По-прежнему нарушает условия использования геокодера?
- ... потому что Google может изменить свои результаты. Возможно, компоненты адреса с меньшей вероятностью изменятся, но они все равно могут измениться, поскольку люди сообщают об ошибках данных в Google. (Конечно, по крайней мере, почтовый индекс может измениться.)
3) Геокодируйте адрес, сохраняйте широту / долготу, но не ищите точно широту / долготу. Выполните поиск в небольшом радиусе вокруг полученной точки в поисках возможных совпадений. Сравните эти возможные совпадения по компонентам адреса.
Это может быть лучший ответ, за исключением того, что он по-прежнему нарушает условия использования геокодера Google.
4) Геокодируйте адрес на входе, получите компоненты адреса, но просто используйте их для хранения проанализированного нормализованного почтового адреса в базе данных.
Добавьте вручную скрученный код, чтобы разделить нормализованные адреса на еще более мелкие поля (название улицы, тип улицы, префикс, постфикс ...). Когда пользователь выполняет поиск, запускает тот же код нормализации, а затем выполняет поиск по полям.
Думаю, это сработает, но использование моего собственного парсера адресов кажется рецептом боли. Похоже, это просто не может быть правильным. (Я не могу быть первым, кому нужно решить эту проблему, не так ли?)
person
Dan Fabulich
schedule
19.12.2013