При создании различных веб-сервисов возникает необходимость указания адреса или географического положения на карте. Например, при создании сервиса по продаже недвижимости, необходима навигация и поиск объектов по заданному региону, городу, району.
Как правило, при добавлении нового объекта пользователю предоставляется возможность последовательно выбрать название страны, города, района и т.д. Такой интерфейс требует предварительного заполнения справочников названий, поддержки, актуализации.
Предлагается вариант реализации такого интерфейса без заполнения справочников, с использованием функционала Google Maps Api.

Предыстория


До появления он-лайн карт вопрос выбора расположения решался путем создания различных справочников географических названий. При создании международного сервиса, ситуация осложняется необходимостью перевода названий, хранения значений на разных языках.
Если учесть, что только в России число населенных пунктов составляет десятки тысяч, можно представить возникающие при этом проблемы.
Многие шли более простым путем: давали пользователям возможность самостоятельного ввода названий населенных пунктов и адресов. Такой подход конечно проще, но чреват различиями в написании названий. Например, название города Санкт-Петербург можно написать многими способами: Санкт Петербург, С. Петербург, Петербург и т.д.
В этом случае возникает необходимость в проверке вводимых данных, или невозможность правильной группировки информации.

Текущая ситуация


С появлением картографических он-лайн сервисов, ситуация стала меняться.
Сервис Google Maps первым предоставил свободное API для использования карт на сайтах.
Многие ограничились тем, что просто добавили к имеющемуся интерфейсу дополнительную возможность указания точного положения на карте. Но даже эта возможность сильно улучшила представление информации. Появилась возможность отображения относительного положения многих объектов на карте с помощью маркеров, аналогично, тому, как раньше с помощью булавок отмечали положения на бумажных картах…
Тем не менее, ввод информации для многих ранее существующих сервисов, по-прежнему требовал последовательного выбора названий из списков, и лишь после этого указания положения на карте.
Нововведения
При разработке сервиса аренды вилл и апартаментов у автора возникла идея создания интерфейса добавления объектов без использования справочников географических названий.
Одной из функций Google Maps API является определение адреса указанной точки, так называемый Geocoding. С его помощью, при указывании на карте положения объекта, можно получить адрес в определенном формате. Использую полученные данные, можно непосредственно при добавлении объекта создать и заполнить соответствующую структуру справочника географических названий. Соответственно, отпадает необходимость предварительного создания справочников, выбора названий при вводе.
Так как создаваемый сервис является международным, необходима была возможность ввода и хранения информации на разных языках.
После изучения спецификаций форматов получаемых данных, был разработан интерфейс отвечающий необходимым требованиям.

Преимущества


С точки зрения пользователя, добавление объекта с использованием такого интерфейса проще, чем в традиционном случае. Сокращается количество необходимых действий, достаточно лишь найти свой объект на карте.

Рассмотрим алгоритм его работы:
1.При добавлении объекта, пользователь вводит адрес или ключевое слово искомой местности в строку поиска, нажимает «Искать».



2.Если такой адрес существует, отображается карта, на которой маркером отмечено положение объекта.
в строке поиска при этом отображается полный адрес объекта, при этом в скрытых полях формы сохраняются координаты и гео-структурные данные на 2-х языках.



3.Если объект не имеет точного почтового адреса (например, садовый дом), пользователь может воспользоваться функцией «указать курсором» и самостоятельно отметить на карте объект. (при этом будет определен ближайший населенный пункт)

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



Поскольку все названия связаны с единой базой названий Google, отсутствует проблемы с различным написанием названий.
Таким образом, в базе данных сайта создается выборка структурной гео-информации из базы Google, относящейся к хранимым объектам.