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

    Использование 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
    Павел Осипов

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 13

      0
      Кстати, всегда интересовало, а почему на самой карте пишут Moskva, а на хинте Moscow?
        0
        Потому что нужно шарить в апи как ему объяснить на каком языке показывать карты.

        Ну вот у людей получается же mapsonline.ru/realestate/map/offer все на нормальном русском языке без скобочер и транслитераций
          0
          Настроить отсутствие отображения не местных, а стандартных названий конечно можно, но если так делать, нужно добалять возможность пользователю включить её, а то если я захочу на вышеприведённом сайте найти что-либо, к примеру в Пекине, то лично меня затруднит прочитать названия улиц.
            0
            Дык зачем выбор тогда предлагать. Смотрится локаль у браузера — и подбирается отборажение. Но я не о том.

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

            А то что кому-то нужно посмотреть объект допустим в пекине при не знании местного языка — это еще более редкий случай чем вообще пользование картами для дела )
              0
              В общем согласен, можно насчёт мелочей поспорить, но оно того не стóит.
                0
                И я соглашусь что просто придираюсь, но хотелось поделится тем что можно иметь карты просто на русском и все )
                  0
                  Просто я живу в Латвии, работаю с Норвегами, Шведами и даже Японцами, да ещё и в туристической тематике, поэтому видимо дополнительный перевод воспринимается как нечто само-собой разумеющиеся.

                  У каждого своя специфика.

                  Как-то от темы совсем отклонились
                    0
                    Все это в теме ), без учета таких деталей хорошие вещи обычно не получаются )
          0
          Потому что не добавили параметр hl=ru к js карт или к static файлу.
            0
            Да, есть ещё некоторые опциональные параметры, к примеру параметр 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 — Позволяет явно указать язык для отображения всех названий на карте. Понимает ограниченное количество названий локалей.
          0
          На сколько я знаю, Moscow и Moskva это равносильные названия.
          Плюс есть официальные международные правила транслитеризации, к примеру на почте для адресов на письмах, бумажных
            0
            Хабракат бы улучшил эту статью…
              0
              Это моя первая статья на хабре, как только пойму, где хабракат нужно использовать, так всё будет в порядке

            Only users with full accounts can post comments. Log in, please.