четверг, 28 июня 2007 г.

Google Mapplets: Начинаем работу

Итак, мы прочитали статью Google Mapplets: Концепция и примеры. Введение или ее оригинальный вариант на сайте Google, теперь хотим сделать что-нибудь сами. Разумеется, не для своей учетной записи в Google, а в общем доступе на своем сайте :-D Я не буду разделять маплеты и просто Google Maps API, хотя это не одно и то же, но из маплета можно скопировать код в обычную веб-страничку, также можно код Google Maps API оформить как маплет (не всегда, об этом пойдет речь в последней статье цикла). Будем просто рассматривать способы создания нужных нам приложений, а для удобства я использую название "маплет" как для кода Google Maps API в веб-страницах, так и для Google Mapplets. В тех случаях, когда речь будет идти исключительно о технологии Mapplets мы будем пользоваться термином "настоящий" маплет.

Первым делом нам нужно получить некий ключ, который позволит запускать маплеты со своего сайта. Дело в том, что скрипт, обслуживающий маплеты, проверяет этот самый ключ и если URL директории с маплетом не соответствует ключу, маплет не запускается. Правда, Вы можете скачать сам скрипт (http://maps.google.com/maps?file=api&v=2&key) и отключить в нем проверку ключа сайта (проверяется значение переменной GValidateKey), но будем надеяться, что Вы этого не сделаете, а отправитесь на страничку Google Maps API - Sign Up и честно получите ключ для своего сайта. На мой взгляд, условия использования довольно либеральные (полмиллиона просмотров в сутки, 50 тысяч запросов на геокодирование, общий доступ к сайту, не менять логотип на карте). Достаточно указать URL директории, в которой Вы планируете размещать маплеты и гугл сообщит Ваш ключ и предложит пример маплета, который вы можете тут же сохранить на Вашем сайте и насладиться работой своего первого маплета.
Заглянул на страничку с правилами для корпоративного использования, там все туманно, но есть одна "зацепка" - корпоративная лицензия стоит от 10 тысяч долларов в год. Немало, но паршивая карта Москвы (в формате MapInfo, с откровенно кривой топологией и атрибутикой в отдельных слоях) обойдется существенно дороже. Притом с условием использования только для одного клиента... А тут весь мир на карте. Есть о чем задуматься. А поскольку я очень "люблю" Роскартографию (притом взаимно, впрочем, я-то им ничего плохого не делал, а вот они мне...), то надеюсь, что Вы задумаетесь.

Зная то, о чем я Вам сейчас рассказал, нетрудно разместить пример из предыдущей статьи на своем сервере. Замечу мимоходом, что русский язык поддерживается, надписи на карте выводятся как им положено. Я использовал кодировку веб-страницы cp1251 (charset=windows-1251). Во избежание изматывающей дискуссии о том, какая кодировка "правильнее", попробовал вот так:
cat hello.html |iconv -f cp1251 -t utf8 >hello_u.html
и заменил в коде странички charset=windows-1251 на charset=utf-8. И в этом случае все работает правильно, на чем тему кодировок позвольте считать закрытой.

А теперь сделаем страничку чуть сложнее, добавив элементы управления и метку с надписью. Получили вполне информативную картинку, которую можно использовать на своем сайте (ну, например, чтобы друзья не забывали, где Вы живете - в наш век интернет случается и такое). Код странички простой, можете сами посмотреть, а координаты метки хранятся в файле data2.xml, расположенном в одной директории с файлом странички (да, свалка получается, надо будет переложить, но идею Вы поняли). Вот содержимое этого файла:

<markers>
<marker lat="56.2889" lon="43.940491"/>
</markers>


Вот так выглядит Javascript код:

function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"));
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
map.setCenter(new GLatLng(56.2889, 43.940491), 12);

var infoTabs1 = [
new GInfoWindowTab("Центр города",
"Эту точку гугл эф считает центром Нижнего Новгорода"),
];

GDownloadUrl("data2.xml", function(data) {
var xml = GXml.parse(data);
var markers =
xml.documentElement.getElementsByTagName("marker");
var point1 = new GLatLng(
parseFloat(markers[0].getAttribute("lat")),
parseFloat(markers[0].getAttribute("lon")));
var marker1=new GMarker(point1);
map.addOverlay(marker1);

GEvent.addListener(marker1, "click", function() {
marker1.openInfoWindowTabsHtml(infoTabs1);
});
marker1.openInfoWindowTabsHtml(infoTabs1);

});
}
}


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

Отлично, карта готова и ее может увидеть каждый посетитель Вашего сайта. Теперь Вы можете оформить созданный код в маплет и пользоваться им как кирпичиком при построении сайтов. Можно даже предоставить всем желающим этот "строительный элемент", если только Google сочтет его достойным внимания и включит в свой каталог.

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

В следующий раз мы научимся оформлять карту и добавлять к ней разные "фишки". Итак, читайте
Google Mapplets: Концепция и примеры. Практикум.

9 комментариев:

sim комментирует...

Когда-то примерно про тоже писал статью: http://gis-lab.info/qa/google-web-points.html
Проект на основе этой технологии, некоторое развитие идеи:
http://gis-lab.info/projects/piskulka.html

Печников Алексей комментирует...

Посмотрел указанные источники, интересно. Как я понимаю, была задача рассказать о проделанной работе. Удивился, что так подробно объясняется работа с html тэгами, что куда вставлять, мне кажется, что это не нужно - в коде примеров все видно.
Очень интересный вопрос остался "за кадром" - обработка данных с передатчиков. Например, села птичка на столб ЛЭП, координаты на десяток километров размазались вдоль линии, как это почистить? Думаю, этот вопрос интересен не только мне.

Анонимный комментирует...

Насчёт кодировок не так всё радужно :(
пример: fishingmap.ru. Смотреть в русском ИЕ. Обращать внимание на кнопки управления картой. Никто не в курсе -- как это побороть?

Печников Алексей комментирует...

Пытаться бороться с глюками браузера, намеренно нарушающего все стандарты и не имеющего спецификации совершенно бесперспективное занятие. Я пользуюсь Mozilla Firefox и другим советую.

sim комментирует...

Пардон, как-то не привык на блогах общаться. Обработка данных с передатчиков совсем другая тема, но и тут было кое-что сделано:
http://gis-lab.info/programs/argos/index-rus.html

Ну а про "излишнюю" подробность, ведь и в мануалах все это тоже пишется и на английском языке материалов на порядок больше уже. Однако переписываем и переводим ... дублирование это неплохо. Люди вроде пользуются, иногда подробно не запишешь, пропустишь мелочь...вспоминаешь потом полдня :)

Печников Алексей комментирует...

По ссылочке сходил аосмотреть этот самый "аргос", там некий архив предлагается скачать к небезызвестному ArcView. Ну я точно не буду покупать Windows и ArcView чтобы попробовать запустить Вашу утилиту... На мой взгляд, интересно было бы услышать идеи, а программу написать не проблема, под какую надо операционку и какую надо GIS-программу. Разумеется, если Вы считаете эти идеи своей частной собственностью, то вопросов нет, но вообще-то достаточно знать основные статметоды и иметь немного терпения, чтоб самому разобраться :-)

P.S. А Вы SagaGIS не пробовали?

Печников Алексей комментирует...

Значит, спам-фильтр срабатывает. Точнее, какой-то из них. Сейчас многие бесплатные почтовики спамом балуются, так что внесены в базы спамеров и игнорируются. Пишите с с другого адреса. Сами понимаете, мой почтовый адрес указан очень много где, только антиспам и спасает.

Анонимный комментирует...

Огромное спасибо за статьи!
Подскажите, пожалуйста, что такое 50000 "запросов на геотаргетинг" и чем это отличается от показов страниц

Печников Алексей комментирует...

Запросы на геотаргетинг - это определение географического местоположения (координат) по адресу объекта. Обычно используется для поиска по адресу.


(C) Alexey Pechnikov aka MBG, mobigroup.ru