У нас есть программа, которая отображает данные карты (например, Google Maps, но с гораздо большей интерактивностью и пользовательскими слоями для наших клиентов).
Мы разрешаем навигацию через набор полей со списком, в которых определенные поля предварительно заполнены кучей данных (например, Страна: Канада, заполнено поле Провинция. Выберите Онтарио, и заполняется список округов / регионов. Выберите округ / регион, город заполнен и т. д.).
Хотя это гарантирует точные адреса, пользователям будет больно, если они не знают, где находится уличный адрес или город (т. Е. В каком округе / регионе находится кухонный комбайн?).
Итак, мы пытаемся создать анализатор адресов с текстовым полем произвольной формы.
Пользователь может ввести что-то вроде этого (например, Google Maps, Bing Maps и т. Д.):
22 Main St, Kitchener, On
И мы могли бы разделить его на разделы, выполнить поиск данных и добраться до точки, которую они ищут (или предложить альтернативы).
Проблема в том, как правильно распределить информацию? Как мы разбиваем разделы и находим возможные совпадения? Я предполагаю, что мы не будем гарантировать, что пользователь будет вводить данные в формате, который мы всегда ожидали (очевидно). В качестве продолжения этого было бы, как представить данные, если мы не найдем точное совпадение (или не найдем несколько точных совпадений ... например, два города с одинаковым названием улицы в разных округах).
У нас есть тонна данных, доступных в картографических данных (в основном это формат вкладки mapinfo). Таким образом, мы можем быстро просмотреть названия улиц, городов, штатов и т. Д. Но я не уверен в том, как лучше подходить к этой проблеме. Конечно, было бы неплохо использовать Карты Google, но большинство наших клиентов находятся в закрытых сетях, где внешний доступ обычно не разрешен, и большинство из них не хотят полагаться на карты Google (поскольку они не содержат столько информации, сколько им нужно , например, пользовательские слои карты). Очевидно, что они могли бы зайти в Google и найти правильное местоположение, а затем перейти к нашему программному обеспечению, но это потребовало бы много времени, и скорость процесса может быть весьма важной.