Pull to refresh

Использование Google static maps

Reading time5 min
Views5K

Использование Google static maps


В статье рассмотрены основные возможности использования статических карт Google на основе собственного опыта автора.

Google предоставляет два варианта использования своих картографических сервисов.
  • Google maps, базирующийся на JavaScript API, предоставляющий разнообразные возможности для отображения различной географической информации.
    Имеется хорошо продуманная и структурированная библиотека классов, с документацией к которой можно ознакомится по следующим ссылкам:
    English, Русский и поиграться в песочнице


  • И второй вариант, предоставляет намного меньше функциональности, но иногда только им и возможно воспользоваться.
    Это статические карты. В общих чертах, с использованием этого сервиса можно просто отобразить некоторую карту, причём максимальный размер получаемого изображения равен 512х512 пикселей, также, вместе с координатами, допустимо указывать уровень приближения (zoom) и добавлять дополнительные метки.




Оба варианта сервисов имеют свои преимущества и должны использоваться во вполне определённых областях. Но для того, чтобы грамотно определить когда какие карты использовать, нужно знать все возможности.

Данная статья написана о статических картах, о обычных можно будет рассказать в другой раз.

Static google maps


Для работы с API Google нужно пройти бесплатную регистрацию и получить API key, который затем используется в большинстве случаев.

Также, для разработчиков предоставляются полная информация по использованию Static Maps API, которая расположена по следующим адресам: English и Русский.

Бывают случаи, когда очень хочется динамически использовать карты в проекте, но возможности использовать обычные карты Google нет. В основном это обусловлено наличием поддержки JavaScript в целевой платформе.
Хороший пример, J2ME, весьма приличные возможности по сетевому взаимодействию, но нет абсолютно никаких возможностей использовать JavaScript. А посему, статические карты является одним из наилучших решений.

Рассмотрим гипотетический мобильный сервис: Пользователи могут свободно добавлять в базу данных свои бары, кафе и прочие предприятия общественного питания, после чего, на основе введённого адреса, вычисляются координаты места и затем на странице с его описанием можно сразу посмотреть карту.

Видно, что задача разбивается на две подзадачи:
  • Получить координаты по адресу;
  • Получить карту по координатам.

Также можно добавить ещё третью подзадачу, организовать навигацию по карте.

Получение координат по адресу


Эта процедура называется geocoding, также имеется reverse-geocoding, когда на основе координат выдаётся адрес, но её мы рассматривать не будем.
Подробная описание расположено по следующим адресам: English и Русский

Для успешного geocoding`a нужно всего две вещи адрес в формате, понятном Google и API key.
Если с первым всё просто, что термин понятности для Google требует уточнения. Дело в том, что для гарантированного удачного geocoding`a введённый адрес должен быть максимально полным и точным, ведь, к примеру, в той же Америке запросто можно найти и Москву и Париж. Также присутствует требование полноценности адреса, к примеру если улица называется “Красных Стрелков”, то на запрос “Кр. Стрелков” скорее всего ничего найдено не будет.

Далее всё просто, координаты предоставляются в виде пары значений, широты и долготы и нужно отослать интересующий адрес на гугловский сервис
http://maps.google.com/maps/geoуказав следующие параметры:
  • q — Адрес подлежащий geocoding`у;
  • key — Ваш API key;
  • output — Требуемый формат ответа, тут возможны следующие значения: xml, kml, csv или json.

Пример получения случайного адреса в Москве:
http://maps.google.com/maps/geo?q=Russia%20Moscow%20Tverskaja%2011&output=json&key=abcdefg

UPD 1 Перенесу свой коментарий в статью, думаю тут ему самое место.
___________________
Есть ещё некоторые опциональные параметры, к примеру параметр format, чтобы получать изображение не в дефолтном GIF, а в JPG, или PNG (моём любимом).
Приведу уж и все остальные:

maptype — Тип запрашиваемой карты может быть кроме mobile ещё satellite, terrain, hybrid.

path — Можно указать отрисовку линии между двумя точками, и точек можно указать много. Но такой вариант подходит тоько если строить эти линии в ручную, так-как серьёзную карту руками не построишь, а автоматом он не учитывает улицы, реки и пр. просто рисует линию.
Хотя есть возможность получить путь от одной точки до другой с учётом всего этого, но только при использовании обычного JS API.
Координаты узловых точек разделены опять символом трубы "|".
Пример: path=rgba:0xff0000ff,weight:5|40.737102,-73.990318|40.749825,-73.987963|40.752946,-73.987384|40.755823,-73.986397

span — Параметр учитывается только если не указан zoom, так-как с помошью span можно указать размер отображаемой области. К примеру center=40.714728,-73.998672&span=20,20 отобразит центр Манхеттена и область вокруг размером 20х20 градусов.

frame — Если присутсвует, то вокруг карты будет показана голубая рамка шириной в 5 пикселей.

sensor — В текущей версии помечен как обязательный. Насколько я понял, его нужно указывать равным true, если приходят собственых координат с движущегося устройства.

Ну и последний, hl — Позволяет явно указать язык для отображения всех названий на карте. Понимает ограниченное количество названий локалей.
___________________

Думаю разобрать полученные данные не составит труда, тем более, что на разных языках программирования это делается по разному, а на этом я останавливаться не буду.

В итоге мы получили либо нули, если что-то пошло не так, либо координаты адреса которые нужно сохранить в базу данных, так-как каждый раз заниматься geocoding`ом весьма накладно.

Получение карты по координатам


Это вторая часть задачи возникает как только нам нужно отобразить карту. В принципе тут тоже всё просто, нужно воспользоваться вторым сервисом Google:
http://maps.google.com/staticmap

Он принимает следующие параметры:
  • center — Координаты центра карты (формат 37.6095373,55.7606587);
  • zoom — Уровень приближения карты, в общем случае число от 1 до 15;
  • size — Размеры запрашиваемого изображения, передаются в виде WxH, к примеру 300х200, и максимальные значения определены как 512х512 пикселей;
    key — Ваш API key;
  • maptype — Тип карты, тут возможно несколько вариантов, но в данном случае больше всего подходит значение mobile;
  • markers — Используя маркеры можно добавить дополнительные метки на карту, к примеру показать окружающие кафе. Формат использования таков:
    {широта},{долгота},{цвет}{буква} разделяются маркеры символом трубы "|"

Пример:
markers=40.702147,-74.015794,blues|40.711614,-74.012318,greeng
Тут создаются два маркера, первый синий с буквой S, второй зелёный с буквой G.

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

Остаётся ещё вопрос организации навигации, но это уже детали приложения, в простейшем случае, рядом с картой можно расположить линки для с соседними координатами и для увеличения/уменьшения (zoom+1,zoom-1) и каждый раз загружать новую карту, либо организовать нечто более сложное с асинхронными запросами и перерисовкой карты, в принципе на J2ME это не сильно сложно.

2009.06.12
Павел Осипов

Tags:
Hubs:
Total votes 17: ↑14 and ↓3+11
Comments13

Articles