Google Maps

3 октября 2008, 18:31 Павел Марковнин JavaScript рейтинг +37-

Осваиваем Google mapsВсе вы, наверное, знаете, что совсем недавно мы запустили свой новый проект. Это карта Wi-Fi точек по городам России. В качестве API для карты мы выбрали google карты (конкурентов у него не было и нет). Так вот, сегодня я расскажу некоторые о некоторых полезных / сложных / интересных моментах, с которыми я столкнулся при использовании Google Maps. В общем, начинаем.

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

Начало работы

Прежде всего идем на домашнюю страницу api гуглокарт. Чтобы использовать карты на своем сайте, вам необходимо зарегистрироваться и получить специальный ключ (он уникален для каждого домена). Стоит отметить, что если вы пока работаете на локалхосте, то ключ необязателен.

Далее нужно подключить скрипт google карт к вашей странице и вывести карту в определенный блок. Делается это следующим образом:

<!DOCTYPE html "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Гугокарты</title>
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=abcdefg" type="text/javascript"></script>
<script type="text/javascript">
function initialize() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(59.94, 30.3), 13);
}
}
</script>
</head>
<body onload="initialize()" onunload="GUnload()">
<div id="map_canvas" style="width: 500px; height: 300px"></div>
</body>
</html>

Функция initialize() проверяет, справится ли браузер с картами, и, если да, то помещает карту в блок с id="map_canvas". Далее центр карты (map.setCenter(...)) ставится в точку c широтой 59.94 и долготой 30.3. Масштаб карты — 13.

Еще парочка моментов. На google картах есть подписи, язык которых по умолчанию зависит от языка вашего браузера. Если вы хотите, чтобы карты всегда были на каком-то одном языке и не зависили от языка браузера, то подключать google карту к странице нужно вот так (параметр hl отвечает за язык):

 <script type="text/javascript" src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=abcdef&amp;hl=ru"></script> 

Контролы

Есть дефолтные (их положение и внешний вид фиксированы), а есть свои.

Дефолтные можно подключить вот так (модифицированная функция initialize()):

 function initialize() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map_canvas"));
map.addControl(new GSmallMapControl()); // масштаб и перемещение карты
map.addControl(new GMapTypeControl()); // переключение типов карты
map.setCenter(new GLatLng(59.94, 30.3), 13);
}
}

Дефолтные контролы нас не устраивали, поэтому я стал искать, как сделать свои. В итоге я нашел вот такой клевый мануал по google картам на русском (перевод официальных мануалов от гугла):

Среди методов изменения google карты есть и нужные нам:

Эти действия можно повесить на любой элемент вашей страницы, который потом можно стилизовать по своему вкусу.

Маркеры и иконки

Это отметки на карте. На любой маркер можно повесить любой действие. Вот так добавляется маркер на google карту:

var point = new GLatLng(point_lat, point_long);
var marker = new GMarker(point);
map.addOverlay(marker);

Если вы хотите, чтобы ваш маркер можно было перетаскивать, то добавляйте маркер на карту вот так:

 var point = new GLatLng(point_lat, point_long);
var marker = new GMarker(point, {draggable: true});

GEvent.addListener(marker, "dragstart", function() {
alert('Начали перетаскивать')
});

GEvent.addListener(marker, "dragend", function() {
alert('Перетащили');
});

map.addOverlay(marker);

На месте алертов можно вставить свои функции.

Теперь будем ставить свои иконки на маркеры (гугловские тоже ничего, но свои-то лучше ;-). Определяем объект tinyIcon, который и будет отвечать за иконку маркера:

 var tinyIcon = new GIcon();
tinyIcon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png"; // путь к иконке
tinyIcon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png"; // к тени (если она вам нужна)
tinyIcon.iconSize = new GSize(12, 20); //размеры иконки
tinyIcon.shadowSize = new GSize(22, 20); // размеры тени
tinyIcon.iconAnchor = new GPoint(6, 20); // "центр" иконки
tinyIcon.infoWindowAnchor = new GPoint(5, 1); // точка привязки инфоокна

И чтобы сделать маркер с иконкой tinyIcon:

 markerOptions = { icon:tinyIcon };
var marker = new GMarker(point, markerOptions);

Инфоокна

Опять же, можно использовать встроенные инфоокна (что проще) и свои (которые можно сделать по своему вкусу). Стандартные инфоокна вызываются вот так:

 GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml("Здесь текст окна в HTML");
});

Мы решили пойти сложным и красивым путем и начали искать библиотеки для реализации собственных окон. В итоге нашли набор вспомогательных утилит для google карт и среди них ExtInfoWindow.

Штука довольно хорошая (хотя тяжелая) — все просто и понятно. После подключения скрипта к странице само окошко вызывается вот так:

 GEvent.addListener(marker, 'click', function(){ 
marker.openExtInfoWindow(
map,
"simple_example_window", // это префикс классов css элементов инфоокна
"Опять же ваш html.",
{beakOffset: 3}
);
});

А что делать, если много маркеров?

Мы задали себе этот вопрос когда на карте Москвы у нас было около 700 точек. При таких количествах Ослик (и 6-ой, и 7-ой) вис в лучшем случае минуты на 2 (в худшем вис намертво), после чего дико тормозил. Сначала мы попробовали выводить точки по очереди (по несколько штук с таймаутом). Получилось красиво, но так же долго и фатально для Осла.

Затем я нашел на Хабре статью, в которой приводились разные способы оптимизации. Надо сказать, что все они, конечно, интересные, но довольно запарные.

В ходе поисков я нашел отличный скрипт под названием кластерер. Вот, что умеет эта хитрая штука:

Посмотрим, как это добро использовать:

 var clusterer = new Clusterer(map);
clusterer.AddMarker(marker, title); // это вместо map.addOverlay(marker);

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

Единственное, что я переделал в скрипте кластерера это событие при клике на сгруппированный маркер. По умолчанию выводится окошко со списком маркеров в этой группе. Это мне показалось не очень удобным, поэтому я сделал так, что при клике карта увеличивается на 1 деление и центр карты ставится на центр группы.

Ссылки в тему

Спасибо за внимание и до новых встреч!

Рекламное место, которое может стать вашим

Понравилась статья?

Тогда подпишись на обновления через RSS или воспользуйся
другими способами подписки.

Читать в Яндекс.Ленте Добавить в Google Добавить в Netvibes
  •  

Комментарии — 98

RSS
  • Аватарка
    3 октября 2008 в 22:35 Artman
    отличный сервис и хорошая статья!
  • Аватарка
    4 октября 2008 в 1:35 angrycat
    Вау-вау. Я уже использовал гугл-карты, но тут столько подробностей, разрыть которые, у меня не хватало терпежу. Спасибо.
  • Аватарка
    4 октября 2008 в 2:13 ]]>kikaha]]>
    Обычно я норовлю добавить что-то умное, типа "а вот такая фича еще делает это еще лучше и проще", однако тут добавить нечего - очень краткий, но емкий туториал, огромное спасибо, как раз планирую один сервис с гуглокартами! В букмарки, и страничку сохраню на всяк случай :))
  • Аватарка
    4 октября 2008 в 12:06 ]]>GIN]]>
    Слушайте, вот это вещь. Я конечно прбовал через PHP с гул-картами общаться, но через JS ещё интересней получается. Спасибо. Отлично написано.
  • Аватарка
    8 октября 2008 в 9:48 Rodriguez
    Очень интересный проект! И познавательная статья! Спасибо!
  • Аватарка
    10 октября 2008 в 8:06 Пацаны с Ботсада
    Отлично. Просто. Тэнькс!!!
  • Аватарка
    28 октября 2008 в 14:27 KELiON
    Тоже приходилось работать с гуглокартами, только была маленькая проблемка решения которой я тут не нашел. Добавляя свои картинки на карту, при уменьшении и увеличении масштаба карты, размер картинок не меняется, а при малом размере карты это иногда выглядит очень не красиво. Как с этим можно бороться??
  • Аватарка
    28 октября 2008 в 18:49 ]]>Grin]]>
    KELiON, ты можешь отслеживать изменение масштаба карты соответсвенно с ним изменять размер картинок
  • Аватарка
    28 октября 2008 в 19:20 ьпки
    Суперская статья! Спасибо огромнейшее.
  • Аватарка
    10 ноября 2008 в 13:42 alexs
    Респект за статью! Оказался здесь в поисках решения своей задачи, нужно определить центр карты пересечением линий, может вы подскажите как это реализовать
  • Аватарка
    10 ноября 2008 в 13:54 ]]>Grin]]>
    alexs, расскажи подробнее про задачу, пока что не совсем понятно.
  • Аватарка
    10 ноября 2008 в 14:45 alexs
    спасибо что откликнулись, попытаюсь поподробней. есть карта и пользователь может себя добавить на нее и для этого точку своего местоположения он должен разместить в центре окна карты, что понятно не очень удобно и наглядно, вот и нужно как-то прорисовать этот центр.
  • Аватарка
    10 ноября 2008 в 15:14 ]]>Grin]]>
    так сделай маркер, скажем в виде кружка, который бы всегда располагался точно по центру карты (при загрузке карты понятно как сделать, на окончание перетягивания карты вешаешь функцию, которая бы этот маркер ставила по центру)
  • Аватарка
    10 ноября 2008 в 15:50 alexs
    спасибо Grin, да, я обдумывал такой вариант...
  • Аватарка
    10 ноября 2008 в 17:35 Earth
    как работает поиск улиц ? по какому принципу, есть автоматизированная система, или много ручного гемороя ?
  • Аватарка
    10 ноября 2008 в 17:56 ]]>Grin]]>
    Earth, что вы имеете в виду? Есть специальная функция, аргументом которой является строка-адрес (особых ограничений нет, но все же лучше задавать так: "страна, город, улица, дом). Или вы что-то другое имели в виду?
  • Аватарка
    10 ноября 2008 в 20:23 Earth
    Я делаю карту с нуля, тоисть есть спутник, на него рисую каждую улицу, название улици, из бази идет select по названию, но если я хочу делать select по конкретному адресу, то надо для каждого домика указивать его номер ?
  • Аватарка
    14 ноября 2008 в 21:57 ]]>za-games]]>
    Мая в шоке! Так интересно.
  • Аватарка
    16 ноября 2008 в 23:57 Earth
    Grin, куда пропали?
  • Аватарка
    17 ноября 2008 в 10:21 ]]>Grin]]>
    Earth, Я думаю, что вам все-таки придется для каждого дома указывать его номер вручную. Только зачем вам изобретать велосипед - чем плохи карты гугла или яндекса?
  • Аватарка
    21 ноября 2008 в 0:02 Earth
    Для города, которий я обрал для себя етих карт не существует (
  • Аватарка
    19 декабря 2008 в 17:49 kate
    Спасибо за статью! Все действительно очень понятно и полезно:) Есть вопрос: нужно реализовать следующее при вводе в текстовое поле города должна появляться подсказка со списком городов (как реализовать подсказку понятно - ajax) а можно как-то список городов подгружать из базы Google Maps?
  • Аватарка
    19 декабря 2008 в 18:47 ]]>Grin]]>
    Kate, насколько я знаю, гугл просто так не дает список городов по запросу. Но можно посмотреть куда и как идет запрос когда печатаешь город в строку поиска на сайте карт Гугла
  • Аватарка
    4 января 2009 в 15:33 ]]>j0hndoe]]>
    Брат, спасибо тебе ну просто ппц, какое. Еще не испробовал, но судя по отзывам, ты еще тот отморозок! :) Еще раз спасибо. Буду делать серьезный проект, используя твои рекомендации.
  • Аватарка
    9 января 2009 в 12:54 genix
    Спасибо за статью, полезно. Как раз пишу дипломный проект, использующий эти технологии.
    Кстати, про доавбление точки пользователя по-моему вы занули с центрами... Нельзя разве по клику на карте в любом месте обрабатывать координаты точки? У меня сделано так - при редактировании профиля клик по карте заносит значения широты и долготы в тексбоксы, а при сохранении они пишутся в базу.
  • Аватарка
    9 января 2009 в 15:49 ]]>Grin]]>
    Genix, не очень понял твою мысль )
  • Аватарка
    9 января 2009 в 17:37 genix
    Товарищ aleks писал:
    [quote]есть карта и пользователь может себя добавить на нее и для этого точку своего местоположения он должен разместить в центре окна карты, что понятно не очень удобно и наглядно, вот и нужно как-то прорисовать этот центр.[/quote]

    Так вот, это как-то неудобно заставлять пользователя размещать карту по центру, чтобы обозначить его местоположение... Гораздо проще обрабатывать событие клика по карте и с получеными координатами работать, не?
  • Аватарка
    9 января 2009 в 17:58 ]]>Grin]]>
    Genix, ты прав, это не удобно. Я и не предлагал такой вариант Алексу. Возможно, условия задачи Алекса требовали именно центра
  • Аватарка
    18 января 2009 в 20:47 irina
    привет, у меня вопрос на насчет extinfowindow. Вы тестировали работу в Опере? Я сначала написала скрипт, потом начала отлаживать - в опере окно выводится плохо, такое ощущение, что всякие там left и top для уголков, линий, кнопки "close" считаются неправильно(=. Посмотрела на http://gmaps-utility-library-dev.googlecode.com/svn/trunk/extinfowindow/examples/ajaxContent.html - такая же проблема, как у меня. Случайно не знаете, как исправить ошибку? Opera 9.52 под виндами
    Спасибо за статью.
  • Аватарка
    18 января 2009 в 21:39 irina
    Вообщем-то, вы явно, что сделали с extinfowindow, потому что после того, как я взяла скрипт с вашего сайта, все заработало=) Надеюсь, вы не обидитесь, все-таки опен сорс)))
  • Аватарка
    18 января 2009 в 22:14 ]]>Grin]]>
    Ирина, я тоже где-то в их SVN откопал нормальную рабочую версию (видно об ошибке в опере они знают и даже ее пофиксили, но почему-то этого нет в последних релизах), просто совсем забыл об этом ;-)
    Конечно, пользуйся на здоровье
  • Аватарка
    19 января 2009 в 11:38 irina
    ох... столько времени потеряла на гуглинг, хорошо, что ваша статья случайно подвернулась=) спасибо!
  • Аватарка
    10 марта 2009 в 7:12 z0rg
    Очень вам благодарен, важная, полезная и содержательная информация
  • Аватарка
    13 марта 2009 в 17:40 Bacya
    Почему перестала отображаться карта Google Maps API на моем сайте , на другом компе отображается карта , но не отображаются маркеры! Постоянно выскакивает ошибка GMaps2 (определение отсутствует
  • Аватарка
    20 марта 2009 в 15:30 Dmitrii
    Огромное спасибо!!! Написано намного доступней чем у гугла, да и пошире.
  • Аватарка
    1 апреля 2009 в 20:14 ]]>Gorniy]]>
    Спасибо за статью! Вот небольшой косячок на сайте Wi-Fi:
    http://mistakes.ru/files/images/wi.png
    И здесь в статье:
    (миникальное кол-во в группе...
  • Аватарка
    1 апреля 2009 в 20:24 ]]>Grin]]>
    Спасибо, Gorniy, сейчас исправим
  • Аватарка
    3 апреля 2009 в 0:54 ]]>Gorniy]]>
    Grin, у вас очень хороший сайт, и статьи замечательные. Но ошибок...
    Может, поставите какую-нибудь систему проверки: Orpus или эту. Я бы с удовольствием поучаствовал в исправлении, а то в комментариях как-то не очень приятно об ошибках писать.
  • Аватарка
    3 апреля 2009 в 9:52 ]]>Grin]]>
    Gorniy, спасибо, попробуем что-нибудь из этого. А ошибки... будем делать без них )
  • Аватарка
    13 апреля 2009 в 0:30 ]]>Серж]]>
    Помогите пожалуйста! Как отображать шрифты, чтобы copyright читалось по русскй в EI. в других броузеры все красибо но в internet explorer у меня все плохо. посмотрите www.citynavigator-spb.ru/karta.htm Спасибо заранее!!!
  • Аватарка
    13 апреля 2009 в 1:01 ]]>Grin]]>
    Серж, я не совсем понял твой вопрос: что и как ты хочешь отображать?
  • Аватарка
    14 апреля 2009 в 11:31 Серж
    У меня надписи [карта],[спутник],[гибрид] и copyright, то есть строка "данные карты..." не читаются по-русски когда я запускаю страницу через internet explorer/ А в других броузерах все нормально. может быть у меня барахлит explorer. Если у вас так же страница выходит подскажете как исправить ощибку.
    Merci!
    www.citynavigator-spb.ru/karta.htm
  • Аватарка
    14 апреля 2009 в 11:56 ]]>Grin]]>
    Серж, у тебя сервер отдает страницу в Win-1251, а кодировка HTML выставлена на UTF-8. Думаю, можно серверным языком ставить заголовок с нужной кодировкой.
  • Аватарка
    14 апреля 2009 в 16:41 Серж
    Я поменял и windows-1252 и windows-1251 шрифты меняются но все равно не по-русски. Сейчас у меня стоит windows-1251. посмотрите пожалуйста!
  • Аватарка
    14 апреля 2009 в 17:27 ]]>Grin]]>
    А сам файл в какой кодировке?
  • Аватарка
    14 апреля 2009 в 17:29 Серж
    Grin!
    кажется я нашел ответ по этому адресу http://otvety.google.ru/otvety/thread?tid=2b3966d66d6e29db а именно: надо добавить следующее: <script src="http://maps.google.com/maps..." type="text/javascript" charset="utf-8">
    Спасибо вам всем! и извинте, что беспокоил
  • Аватарка
    27 апреля 2009 в 8:41 ]]>Andrew]]>
    Добрый день!
    Не знаете с чем может быть связан баг ( "GIcon" - определение отсутствует ) в Explorer.v6xx..Пример брал с сайта http://econym.org.uk/ ?
  • Аватарка
    27 апреля 2009 в 12:51 ]]>Grin]]>
    Andrew, скорее всего не объявлен этот объект или не подгрузилась нужная библиотека
  • Аватарка
    27 апреля 2009 в 13:26 ]]>Andrew]]>
    Но в том же 7ом Эксплорере все работает превосходно...а "не объявлен"-это как?
  • Аватарка
    27 апреля 2009 в 15:02 ]]>Grin]]>
    Если не работает только в восьмом ИЕ, то советую поставить на него девелопер бар (возможно, он там есть по умолчанию, не помню точно) и посмотреть на какую строчку он конкретно ругается,

    «не объявлен» означает, что ты применяешь действия к объекту, который еще не был определен.
  • Аватарка
    28 апреля 2009 в 16:53 gimrik
    народ у меня такая ситуация пишу диплом,''разрабатываю'' в нем аналог вот этого http://alarm.tomsk.ru/ и у меня вопрос координаты с машины будут передаваться диспечеру по средсту gprs,подскажите пожалуйста как это сделать.
  • Аватарка
    28 апреля 2009 в 17:03 ]]>Grin]]>
    gimrik, мне кажется, это немного не по теме ;-)
    Для этого нужно иметь GPS
  • Аватарка
    29 апреля 2009 в 8:11 ]]>Andrew]]>
    нужен сервер сбора данных координатных меток, в котором в качестве точки доступа используется настройки GPRS оператора, + доступ в интернет, примерная система реализована в glorient.ru
  • Аватарка
    30 апреля 2009 в 0:34 gimrik
    за сайт спасибо =)
  • Аватарка
    1 мая 2009 в 17:46 ]]>maya]]>
    Интересный проект! Не совсем в тему конечно, но сейчас вспомнила - недавно нашла подборку спутниковых фотографий “Google Maps Typography”, выложены здесь: http://staminadrink.blogspot.com/2009/05/rhett-dashwood-google-maps-typography.html. Там человек собрал алфавит из зданий и др. объектов со спутниковых фотографий.
  • Аватарка
    2 мая 2009 в 21:02 Strato
    Помогите плиз, такая проблема: зарегил сайт на народ.ру и зарегил для него ключ API в гугле. При загрузке сайта вылетает сообщение, что данный ключ уже зарегистрирован для другого сайта. И так уже для двух страничек, что я регистрировал на народ.ру. В чем проблема?
  • Аватарка
    2 мая 2009 в 22:45 ]]>Grin]]>
    Strato, возможно гугл проверяет ключ для домена, а не поддомена (как все сайты на народе).
  • Аватарка
    12 мая 2009 в 19:43 gimrik
    народ есть тут кто может взяться за такую работенку,нужно чтоб на google maps отображались текущее местоположение движущегося обьекта на котором установлен гпс модуль если кто заинтересовался пишите icq 202603800 (raspich@ms.tusur.ru)
  • Аватарка
    20 мая 2009 в 18:47 John
    Подскажите какой скрипт отвечает или код, при одном щелчке левой клавиши мыши на карте происходит приближение карты(увеличение).
  • Аватарка
    20 мая 2009 в 18:54 ]]>Grin]]>
    John, вот так можно:
    $('map-container').addEvent('click',function(event){
        event.stop();
        map.zoomIn();
    });
  • Аватарка
    20 мая 2009 в 21:13 John
    Что я перепутал?

    function initialize() {
    if (GBrowserIsCompatible()) {
    var map = new GMap2(document.getElementById("map_canvas"));
    map.setCenter(new GLatLng(59.94, 30.3), 13);
    }
    map.addEvent('click',function(event){
    event.stop();
    map.zoomIn();
    });
    }
  • Аватарка
    20 мая 2009 в 21:24 ]]>Grin]]>
    Да, событие нужно привязывать на контейнер карты, а не на объект карты.
  • Аватарка
    20 мая 2009 в 21:34 ]]>Grin]]>
    Плюс сама конструкция addEvent('click',function(event)) — это мутулз
  • Аватарка
    25 мая 2009 в 17:38 John
    GEvent.addListener(m, "click", function() {
    m.openInfoWindowHtml("Адрес: ул. Авиамоторная, д.4");
    });
    map.addOverlay(m);
    Как можно в окне, при клике, которое открывает, сделать ссылку
    Я пытаюсь сделать вот так
    m.openInfoWindowHtml("Адрес: ул. Авиамоторная, д.4");
    он ругается и не работает.
  • Аватарка
    25 мая 2009 в 17:46 ]]>Grin]]>
    John, либо экранируй кавычки, либо делай другие:
    m.openInfoWindowHtml('Адрес: <a href="#">ул. Авиамоторная, д.4</a>');
  • Аватарка
    25 мая 2009 в 18:36 John
    выше предложенный пример попробовал, получилось, спасибо.
  • Аватарка
    26 мая 2009 в 14:57 lastevent
    Спасибо за статью! Хотел спросить, как сделать так, чтобы поселить карту в профиле каждого пользователя (дать каждому зарегистрированному на сайте пользователю возможность ставить метку своего адреса). И при этом чтобы была всем пользователям доступна общая карта пользователей. Подскажите как это сделать. Спасибо!
  • Аватарка
    29 мая 2009 в 15:14 justcms
    У меня данные о маркере поступают их XML. Как сделать так, чтоб он отображал русский текст из XML ?
  • Аватарка
    29 мая 2009 в 22:19 ]]>Grin]]>
    lastevent , а в чем возникает проблема?

    justcms, проверь правильность всех кодировок.
  • Аватарка
    31 мая 2009 в 17:19 Justcms
    В HTML добавил
    type="text/javascript" charset="utf-8"
    IE стал правильно отображать названия системных кнопок, но содержимое не отображает

    В XML добавил
    ?xml version="1.0" encoding="windows-1251"?
    FF стал все отображать замечательно, IE пустые поля

    вот пример http://service01.ru/map/1.html
    http://service01.ru/map/example.xml
  • Аватарка
    31 мая 2009 в 21:44 ]]>Grin]]>
    Justcms, делай все в utf-8
  • Аватарка
    31 мая 2009 в 23:23 justcms
    в HTML поставил utf-8 стало:
    FF - все ок, IE - кнопки русские, данные из XML НЕ отображаются

    в XML если меняю Windows-1251 на utf-8
    FF - иероглифы, IE - кнопки русские, данные из XML НЕ отображаются

    Вне зависимости от кодировке в XML файле, IE не отображает русский текст
  • Аватарка
    31 мая 2009 в 23:53 justcms
    все, проблема решилась после создания файла в Dreamweaver и сохранения XML в utf-8
  • Аватарка
    15 июня 2009 в 0:40 John
    Есть код:
    function goooogle() {
    map = new GMap2(document.getElementById("map_canvas"));
    map.setCenter(new GLatLng(55.75, 37.62), 10);

    moscow1 = new GMarker(new GLatLng(55.753576, 37.716450));
    GEvent.addListener(moscow1, "click", function() {
    moscow1.openInfoWindowHtml('text');
    });
    map.addOverlay(moscow1);


    moscow2 = new GMarker(new GLatLng(55.686899, 37.573349));
    GEvent.addListener(moscow2, "click", function() {
    moscow2.openInfoWindowHtml('text');
    });
    map.addOverlay(moscow2);


    moscow3 = new GMarker(new GLatLng(55.689620, 37.602767));
    GEvent.addListener(moscow3, "click", function() {
    moscow3.openInfoWindowHtml('text');
    });
    map.addOverlay(moscow3);

    }
    _________________________

    Как можно метки отдельно описать например

    var metky{opisivaem ih tyt}


    function goooogle() {
    map = new GMap2(document.getElementById("map_canvas"));
    map.setCenter(new GLatLng(55.75, 37.62), 10);

    tyt vivodim nyjnie metki k primery metky 1, 5, 10.

    }
  • Аватарка
    23 июня 2009 в 16:24 Владимир
    Прощу дать ссылку где бы я мог скачать спутниковую карту с отметкой места положения на GPS навигатор . У меня используется NAVITEL .
  • Аватарка
    14 июля 2009 в 16:06 ]]>электротехник]]>
    ну все, дайте я вас расцелую :)
    давно хотел что-то подобное прикрутить у себя на сайте, теперь, вы это найдете, через некоторое время, у меня на сайте в разделе каталог !!!
    огромное спасибо!!!
  • Аватарка
    20 июля 2009 в 18:41 svch
    Чтобы не было "Gmap2 определение отсутствует" надо вот что:
    вместо этого
  • Аватарка
    21 июля 2009 в 16:58 JB
    Всем привет! Решил добавить на свой сайт google maps, но возникли проблемы.. ( может быть кто нибудь поможет разобраться? или хотябы подскажите в каком направлении двигаться..

    в IE же почему-то не грузится правый кусок карты то есть карта есть, но она грузится не целиком и центровка выполняется не корректно.

  • Аватарка
    21 июля 2009 в 17:04 JB
    вот такой код получился, но работает некорректно ((




    //
    if (GBrowserIsCompatible()) {
    var town_names_html = "";
    var gmarkers = [];
    var htmls = [];
    var i = 0;

    var zIcon = new GIcon();
    zIcon.image = "gmapicon1.png";
    zIcon.iconSize = new GSize(20, 20);
    zIcon.shadowSize = new GSize(25, 25);
    zIcon.iconAnchor = new GPoint(9, 34);
    zIcon.infoWindowAnchor = new GPoint(9, 2);
    zIcon.infoShadowAnchor = new GPoint(18, 25);
    zIcon.printImage = "gmapicon1.gif";
    zIcon.mozPrintImage = "gmapicon1.gif";

    var zIcon2 = new GIcon();
    zIcon2.image = "gmapicon1.png";
    zIcon2.iconSize = new GSize(20, 20);
    zIcon2.shadowSize = new GSize(25, 25);
    zIcon2.iconAnchor = new GPoint(9, 34);
    zIcon2.infoWindowAnchor = new GPoint(9, 2);
    zIcon2.infoShadowAnchor = new GPoint(18, 25);
    zIcon2.printImage = "gmapicon1.gif";
    zIcon2.mozPrintImage = "gmapicon1.gif";


    var icons = [];
    icons[0] = zIcon;
    icons[1] = zIcon2;

    function createMarker(point,name,html,icontype) {
    var marker = new GMarker(point,icons[icontype]);
    GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(html);
    });

    gmarkers[i] = marker;
    htmls[i] = html;


    town_names_html += '' + name + '
    ';
    i++;
    return marker;
    }

    function myclick(i) {
    gmarkers[i].openInfoWindowHtml(htmls[i]);
    }

    var map = new GMap2(document.getElementById("map"));
    var center = new GLatLng(58, 39);
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.setCenter(center, 15);

    var request = GXmlHttp.create();
    request.open("GET", "gmaps.xml", true);
    request.onreadystatechange = function() {
    if (request.readyState == 4) {
    var xmlDoc = GXml.parse(request.responseText);



    var markers = xmlDoc.documentElement.getElementsByTagName("marker");

    for (var i = 0; i < markers.length; i++) {
    // obtain the attribues of each marker
    var lat = parseFloat(markers[i].getAttribute("lat"));
    var lng = parseFloat(markers[i].getAttribute("lng"));
    var point = new GLatLng(lat,lng);
    var html = markers[i].getAttribute("html");
    var label = markers[i].getAttribute("label");
    var icontype = parseInt(markers[i].getAttribute("icontype"));


    var marker = createMarker(point,label,html,icontype);
    map.addOverlay(marker);
    }


    document.getElementById("town_names").innerHTML = town_names_html;
    }
    }
    request.send(null);
    }

    else {
    alert("Извините, карта Google не работает с данным браузером.");
    }

    //]]>
  • Аватарка
    22 июля 2009 в 11:15 Тык
    Жалко что о серверной части ни слова, а без серверной части нормально ничего не сделать.
  • Аватарка
    27 июля 2009 в 15:43 JB
    Доброго всем дня! может я не понял чего-то... но какая тут серверная часть? есть XML файл, скрипт JavaScript, который тут приведён ну и гугловский скрипт котрый так включается:

    некорректно только в IE работает (((( как починить незнаю..
  • Аватарка
    16 августа 2009 в 13:07 Elvis
    Ребята , кто то знает как определить по координатам, город ?
  • Аватарка
    2 ноября 2009 в 18:50 JB
    Так и не разобрался почему в IE не работает... ( попробую более просто сделать. поможите советом плз. - может быть кто то знает, как сделать, чтобы под картой напимер список адресов был, и при клике на адрес карта переключалась к нужному месту. Список адресов нормально читается но как при клике карту к нужному месту перемотать непонятно.... пробовал сделать, но опять же работает только в FF... ((((( Заранее спасибо.
  • Аватарка
    8 февраля в 22:29 q1
    прикольно. Сам электронщик, запускаю ЖеПеЭс. Хочу наладить его работу с GoogleMaps-ом. Обычно пользуюсь Билдером, но теперь начну заниматься и JS.
    Короче - спасибо за статью.
  • Аватарка
    9 февраля в 18:02 Natalie
    "Стоит отметить, что если вы пока работаете на локалхосте, то ключ необязателен."
    Подскажите, пожалуйста, как можно работать с google maps локально? Я так понимаю, необходимо скачать дистрибутив, поставить...или нет? Заранее спасибо!
  • Аватарка
    9 февраля в 18:17 ]]>Grin]]>
    Natalie, тут имеется ввиду, что не обязательно работать с гуглокартами с сервера, можно просто сделать папку на рабочем столе (к примеру) и там уже все делать.
    Дистрибутив ставить тоже не надо, нужно просто подключить файл к странице как сказано в статье.
  • Аватарка
    9 февраля в 22:15 Natalie
    а как получить ключ api google maps? Просто указать в качестве доменного имени localhost?
  • Аватарка
    9 февраля в 22:42 ]]>Grin]]>
    Нет, просто любую строку укажите в качестве ключа, например «google_maps_key»
  • Аватарка
    14 февраля в 20:38 ]]>Mark]]>
    Огромное спасибо за весь цикл статей по гугл-картам. Отдельоне спасибо за стиль изложения - он идеальный =)
  • Аватарка
    20 марта в 14:16 ]]>Илья]]>
    Здравствуйте, у моего сайта главная страница выдается под 404 ошибкой в Яндексе, при переходе просмотре сохраненной копии появляется сообщение о том что для этого вэб сайта требуется другой код API карт Google
    http://hghltd.yandex.net/yandbtm?qtree=wHnQA4uFf1Eldc75AHxYiVpigD0pfK6i8rvk42Y%2BrDyWl17%2Bj1un%2FQCnXfc%2Fc23FVzAkjiTXdfPYnvPJgz3Qg4tUKTaDlnj%2BJIyosZ3Sgz3jVoSnY1QzjwgUCaZBfYHSA1tCtn7Ia2NIOd14AWA0YxbWLyF%2BBZs%2Bk8hZab6ATgBsvhHH41qrhchpMSnpyKMc5pjysCUMcFD5QgZ1Njmgcme3%2FLOf3zEr%2FkE7hcT30CxW2gB8THVNs%2BcBVoGH2jkQ&text=%ED%EE%E2%EE%E5%E1%E5%ED%E5%E2%EE&url=http%3A%2F%2Fwww.novoebenevo.ru%2F
    подскажите пожалуйста, в чем может быть проблемма и где найти другой код?

    Спасибо.
  • Аватарка
    21 марта в 0:51 ]]>Grin]]>
    Илья, ключ определяется для домена. У вас на сайте когда смотришь его нормальным способом (зайдя на novoebenevo.ru), все ок, а когда вы смотри сайт из кеша (фактически с hghltd.yandex.ru), ключ не подходит
  • Аватарка
    30 марта в 11:30 Илья
    спасибо. разобрался.
  • Аватарка
    3 апреля в 19:02 Владимир
    Здравствуйте, подскажите плз, как сделать, чтоб при щелчке на маркере выполнялся сценарий Extjs, что-то типа этого, только вместо кнопки должен быть маркер google map
    http://www.extjs.com/deploy/dev/examples/message-box/msg-box.html
  • Аватарка
    6 апреля в 13:10 Владимир
    А точнее как внедрить Flash в google map)?
  • Аватарка
    8 апреля в 13:13 ]]>AlexTIX]]>
    Добрый день.Не подскажете как привязать перетаскиваемый маркер к началу линии?
  • Аватарка
    14 апреля в 15:27 Родион
    Добрый день.
    У меня сайт, каталог организации в моем городе. Сам сайт большой. Но хотелось бы чтобы на сайте показывался адрес от гуглмапс... Я так понял что из поля с адресом организации, должен быть как бы импорт адреса для карты?
    Как это можно сделать?
    www.spravkatver.ru - вот идем к любой организации, просматриваем её подробнее... на странице с просмотром должна быть карта с самим адресом.
    Друзья подскажите как сделать с самого начала, как для самого нуба...
  • Аватарка
    17 апреля в 21:31 VaeR
    Больное спасибо все получилось, вот только в IE кракозябра.
  • Аватарка
    29 июня в 21:46 doka
    А возможно ли рассчитать расстояние между двумя метками на карте?
  • Эл. почта (используется для Граватарки)
  • Домашняя страница
  • Имя в Твиттере
  • Разрешенные теги Текст сообщения (надо бы заполнить это поле)
  • как выглядит какой тег
    жирный текст <b>жирный текст</b>
    курсивный тект <i>курсивный тект</i>
    зачеркнутый текст <s>зачеркнутый текст</s>
    подчеркнутый текст <u>подчеркнутый текст</u>
    ссылка <a href="адрес">ссылка</a>
    function foo() { ... }
    <pre><code>function foo() { ... } </code></pre>