Google Maps

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 карты есть и нужные нам:

  • map.getZoom() — значение текущего зума;
  • map.setZoom(zoomVal) — уставливает значение зума google карты равным zoomVal;
  • map.zoomIn() и map.zoomOut() соответственно приближают и удаляют карту.

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

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

Это отметки на карте. На любой маркер можно повесить любой действие. Вот так добавляется маркер на 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 деление и центр карты ставится на центр группы.

Ссылки в тему

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

Расскажите друзьям

Оцените статью:
  • 1
  • 2
  • 3
  • 4
  • 5

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

Artman
отличный сервис и хорошая статья!
#
Artman
angrycat
Вау-вау. Я уже использовал гугл-карты, но тут столько подробностей, разрыть которые, у меня не хватало терпежу. Спасибо.
#
angrycat
kikaha
Обычно я норовлю добавить что-то умное, типа "а вот такая фича еще делает это еще лучше и проще", однако тут добавить нечего - очень краткий, но емкий туториал, огромное спасибо, как раз планирую один сервис с гуглокартами! В букмарки, и страничку сохраню на всяк случай :))
GIN
Слушайте, вот это вещь. Я конечно прбовал через PHP с гул-картами общаться, но через JS ещё интересней получается. Спасибо. Отлично написано.
#
GIN
Rodriguez
Очень интересный проект! И познавательная статья! Спасибо!
#
Rodriguez
Пацаны с Ботсада
Отлично. Просто. Тэнькс!!!
#
Пацаны с Ботсада
KELiON
Тоже приходилось работать с гуглокартами, только была маленькая проблемка решения которой я тут не нашел. Добавляя свои картинки на карту, при уменьшении и увеличении масштаба карты, размер картинок не меняется, а при малом размере карты это иногда выглядит очень не красиво. Как с этим можно бороться??
#
KELiON
Grin
KELiON, ты можешь отслеживать изменение масштаба карты соответсвенно с ним изменять размер картинок
#
Grin
ьпки
Суперская статья! Спасибо огромнейшее.
#
ьпки
alexs
Респект за статью! Оказался здесь в поисках решения своей задачи, нужно определить центр карты пересечением линий, может вы подскажите как это реализовать
#
alexs
Grin
alexs, расскажи подробнее про задачу, пока что не совсем понятно.
#
Grin
alexs
спасибо что откликнулись, попытаюсь поподробней. есть карта и пользователь может себя добавить на нее и для этого точку своего местоположения он должен разместить в центре окна карты, что понятно не очень удобно и наглядно, вот и нужно как-то прорисовать этот центр.
#
alexs
Grin
так сделай маркер, скажем в виде кружка, который бы всегда располагался точно по центру карты (при загрузке карты понятно как сделать, на окончание перетягивания карты вешаешь функцию, которая бы этот маркер ставила по центру)
#
Grin
alexs
спасибо Grin, да, я обдумывал такой вариант...
#
alexs
Earth
как работает поиск улиц ? по какому принципу, есть автоматизированная система, или много ручного гемороя ?
#
Earth
Grin
Earth, что вы имеете в виду? Есть специальная функция, аргументом которой является строка-адрес (особых ограничений нет, но все же лучше задавать так: "страна, город, улица, дом). Или вы что-то другое имели в виду?
#
Grin
Earth
Я делаю карту с нуля, тоисть есть спутник, на него рисую каждую улицу, название улици, из бази идет select по названию, но если я хочу делать select по конкретному адресу, то надо для каждого домика указивать его номер ?
#
Earth
za-games
Мая в шоке! Так интересно.
Earth
Grin, куда пропали?
#
Earth
Grin
Earth, Я думаю, что вам все-таки придется для каждого дома указывать его номер вручную. Только зачем вам изобретать велосипед - чем плохи карты гугла или яндекса?
#
Grin
Earth
Для города, которий я обрал для себя етих карт не существует (
#
Earth
kate
Спасибо за статью! Все действительно очень понятно и полезно:) Есть вопрос: нужно реализовать следующее при вводе в текстовое поле города должна появляться подсказка со списком городов (как реализовать подсказку понятно - ajax) а можно как-то список городов подгружать из базы Google Maps?
#
kate
Grin
Kate, насколько я знаю, гугл просто так не дает список городов по запросу. Но можно посмотреть куда и как идет запрос когда печатаешь город в строку поиска на сайте карт Гугла
#
Grin
j0hndoe
Брат, спасибо тебе ну просто ппц, какое. Еще не испробовал, но судя по отзывам, ты еще тот отморозок! :) Еще раз спасибо. Буду делать серьезный проект, используя твои рекомендации.
genix
Спасибо за статью, полезно. Как раз пишу дипломный проект, использующий эти технологии.
Кстати, про доавбление точки пользователя по-моему вы занули с центрами... Нельзя разве по клику на карте в любом месте обрабатывать координаты точки? У меня сделано так - при редактировании профиля клик по карте заносит значения широты и долготы в тексбоксы, а при сохранении они пишутся в базу.
#
genix
Grin
Genix, не очень понял твою мысль )
#
Grin
genix
Товарищ aleks писал:
[quote]есть карта и пользователь может себя добавить на нее и для этого точку своего местоположения он должен разместить в центре окна карты, что понятно не очень удобно и наглядно, вот и нужно как-то прорисовать этот центр.[/quote]

Так вот, это как-то неудобно заставлять пользователя размещать карту по центру, чтобы обозначить его местоположение... Гораздо проще обрабатывать событие клика по карте и с получеными координатами работать, не?
#
genix
Grin
Genix, ты прав, это не удобно. Я и не предлагал такой вариант Алексу. Возможно, условия задачи Алекса требовали именно центра
#
Grin
irina
привет, у меня вопрос на насчет extinfowindow. Вы тестировали работу в Опере? Я сначала написала скрипт, потом начала отлаживать - в опере окно выводится плохо, такое ощущение, что всякие там left и top для уголков, линий, кнопки "close" считаются неправильно(=. Посмотрела на http://gmaps-utility-library-dev.googlecode.com/svn/trunk/extinfowindow/examples/ajaxContent.html - такая же проблема, как у меня. Случайно не знаете, как исправить ошибку? Opera 9.52 под виндами
Спасибо за статью.
#
irina
irina
Вообщем-то, вы явно, что сделали с extinfowindow, потому что после того, как я взяла скрипт с вашего сайта, все заработало=) Надеюсь, вы не обидитесь, все-таки опен сорс)))
#
irina
Grin
Ирина, я тоже где-то в их SVN откопал нормальную рабочую версию (видно об ошибке в опере они знают и даже ее пофиксили, но почему-то этого нет в последних релизах), просто совсем забыл об этом ;-)
Конечно, пользуйся на здоровье
#
Grin
irina
ох... столько времени потеряла на гуглинг, хорошо, что ваша статья случайно подвернулась=) спасибо!
#
irina
z0rg
Очень вам благодарен, важная, полезная и содержательная информация
#
z0rg
Bacya
Почему перестала отображаться карта Google Maps API на моем сайте , на другом компе отображается карта , но не отображаются маркеры! Постоянно выскакивает ошибка GMaps2 (определение отсутствует
#
Bacya
Dmitrii
Огромное спасибо!!! Написано намного доступней чем у гугла, да и пошире.
#
Dmitrii
Gorniy
Спасибо за статью! Вот небольшой косячок на сайте Wi-Fi:
http://mistakes.ru/files/images/wi.png
И здесь в статье:
(миникальное кол-во в группе...
Grin
Спасибо, Gorniy, сейчас исправим
#
Grin
Gorniy
Grin, у вас очень хороший сайт, и статьи замечательные. Но ошибок...
Может, поставите какую-нибудь систему проверки: Orpus или эту. Я бы с удовольствием поучаствовал в исправлении, а то в комментариях как-то не очень приятно об ошибках писать.
Grin
Gorniy, спасибо, попробуем что-нибудь из этого. А ошибки... будем делать без них )
#
Grin
Серж
Помогите пожалуйста! Как отображать шрифты, чтобы copyright читалось по русскй в EI. в других броузеры все красибо но в internet explorer у меня все плохо. посмотрите www.citynavigator-spb.ru/karta.htm Спасибо заранее!!!
Grin
Серж, я не совсем понял твой вопрос: что и как ты хочешь отображать?
#
Grin
Серж
У меня надписи [карта],[спутник],[гибрид] и copyright, то есть строка "данные карты..." не читаются по-русски когда я запускаю страницу через internet explorer/ А в других броузерах все нормально. может быть у меня барахлит explorer. Если у вас так же страница выходит подскажете как исправить ощибку.
Merci!
www.citynavigator-spb.ru/karta.htm
#
Серж
Grin
Серж, у тебя сервер отдает страницу в Win-1251, а кодировка HTML выставлена на UTF-8. Думаю, можно серверным языком ставить заголовок с нужной кодировкой.
#
Grin
Серж
Я поменял и windows-1252 и windows-1251 шрифты меняются но все равно не по-русски. Сейчас у меня стоит windows-1251. посмотрите пожалуйста!
#
Серж
Grin
А сам файл в какой кодировке?
#
Grin
Серж
Grin!
кажется я нашел ответ по этому адресу http://otvety.google.ru/otvety/thread?tid=2b3966d66d6e29db а именно: надо добавить следующее: <script src="http://maps.google.com/maps..." type="text/javascript" charset="utf-8">
Спасибо вам всем! и извинте, что беспокоил
#
Серж
Andrew
Добрый день!
Не знаете с чем может быть связан баг ( "GIcon" - определение отсутствует ) в Explorer.v6xx..Пример брал с сайта http://econym.org.uk/ ?
Grin
Andrew, скорее всего не объявлен этот объект или не подгрузилась нужная библиотека
#
Grin
Andrew
Но в том же 7ом Эксплорере все работает превосходно...а "не объявлен"-это как?
Grin
Если не работает только в восьмом ИЕ, то советую поставить на него девелопер бар (возможно, он там есть по умолчанию, не помню точно) и посмотреть на какую строчку он конкретно ругается,

«не объявлен» означает, что ты применяешь действия к объекту, который еще не был определен.
#
Grin
gimrik
народ у меня такая ситуация пишу диплом,''разрабатываю'' в нем аналог вот этого http://alarm.tomsk.ru/ и у меня вопрос координаты с машины будут передаваться диспечеру по средсту gprs,подскажите пожалуйста как это сделать.
#
gimrik
Grin
gimrik, мне кажется, это немного не по теме ;-)
Для этого нужно иметь GPS
#
Grin
Andrew
нужен сервер сбора данных координатных меток, в котором в качестве точки доступа используется настройки GPRS оператора, + доступ в интернет, примерная система реализована в glorient.ru
gimrik
за сайт спасибо =)
#
gimrik
maya
Интересный проект! Не совсем в тему конечно, но сейчас вспомнила - недавно нашла подборку спутниковых фотографий “Google Maps Typography”, выложены здесь: http://staminadrink.blogspot.com/2009/05/rhett-dashwood-google-maps-typography.html. Там человек собрал алфавит из зданий и др. объектов со спутниковых фотографий.
Strato
Помогите плиз, такая проблема: зарегил сайт на народ.ру и зарегил для него ключ API в гугле. При загрузке сайта вылетает сообщение, что данный ключ уже зарегистрирован для другого сайта. И так уже для двух страничек, что я регистрировал на народ.ру. В чем проблема?
#
Strato
Grin
Strato, возможно гугл проверяет ключ для домена, а не поддомена (как все сайты на народе).
gimrik
народ есть тут кто может взяться за такую работенку,нужно чтоб на google maps отображались текущее местоположение движущегося обьекта на котором установлен гпс модуль если кто заинтересовался пишите icq 202603800 (raspich@ms.tusur.ru)
#
gimrik
John
Подскажите какой скрипт отвечает или код, при одном щелчке левой клавиши мыши на карте происходит приближение карты(увеличение).
#
John
Grin
John, вот так можно:
$('map-container').addEvent('click',function(event){
    event.stop();
    map.zoomIn();
});
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();
});
}
#
John
Grin
Да, событие нужно привязывать на контейнер карты, а не на объект карты.
Grin
Плюс сама конструкция addEvent('click',function(event)) — это мутулз
John
GEvent.addListener(m, "click", function() {
m.openInfoWindowHtml("Адрес: ул. Авиамоторная, д.4");
});
map.addOverlay(m);
Как можно в окне, при клике, которое открывает, сделать ссылку
Я пытаюсь сделать вот так
m.openInfoWindowHtml("Адрес: ул. Авиамоторная, д.4");
он ругается и не работает.
#
John
Grin
John, либо экранируй кавычки, либо делай другие:
m.openInfoWindowHtml('Адрес: <a href="#">ул. Авиамоторная, д.4</a>');
John
выше предложенный пример попробовал, получилось, спасибо.
#
John
lastevent
Спасибо за статью! Хотел спросить, как сделать так, чтобы поселить карту в профиле каждого пользователя (дать каждому зарегистрированному на сайте пользователю возможность ставить метку своего адреса). И при этом чтобы была всем пользователям доступна общая карта пользователей. Подскажите как это сделать. Спасибо!
#
lastevent
justcms
У меня данные о маркере поступают их XML. Как сделать так, чтоб он отображал русский текст из XML ?
#
justcms
Grin
lastevent , а в чем возникает проблема?

justcms, проверь правильность всех кодировок.
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
#
Justcms
Grin
Justcms, делай все в utf-8
justcms
в HTML поставил utf-8 стало:
FF - все ок, IE - кнопки русские, данные из XML НЕ отображаются

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

Вне зависимости от кодировке в XML файле, IE не отображает русский текст
#
justcms
justcms
все, проблема решилась после создания файла в Dreamweaver и сохранения XML в utf-8
#
justcms
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.

}
#
John
Владимир
Прощу дать ссылку где бы я мог скачать спутниковую карту с отметкой места положения на GPS навигатор . У меня используется NAVITEL .
#
Владимир
электротехник
ну все, дайте я вас расцелую :)
давно хотел что-то подобное прикрутить у себя на сайте, теперь, вы это найдете, через некоторое время, у меня на сайте в разделе каталог !!!
огромное спасибо!!!
svch
Чтобы не было "Gmap2 определение отсутствует" надо вот что:
вместо этого
#
svch
JB
Всем привет! Решил добавить на свой сайт google maps, но возникли проблемы.. ( может быть кто нибудь поможет разобраться? или хотябы подскажите в каком направлении двигаться..

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

#
JB
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 не работает с данным браузером.");
}

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

некорректно только в IE работает (((( как починить незнаю..
#
JB
Elvis
Ребята , кто то знает как определить по координатам, город ?
#
Elvis
JB
Так и не разобрался почему в IE не работает... ( попробую более просто сделать. поможите советом плз. - может быть кто то знает, как сделать, чтобы под картой напимер список адресов был, и при клике на адрес карта переключалась к нужному месту. Список адресов нормально читается но как при клике карту к нужному месту перемотать непонятно.... пробовал сделать, но опять же работает только в FF... ((((( Заранее спасибо.
#
JB
q1
прикольно. Сам электронщик, запускаю ЖеПеЭс. Хочу наладить его работу с GoogleMaps-ом. Обычно пользуюсь Билдером, но теперь начну заниматься и JS.
Короче - спасибо за статью.
#
q1
Natalie
"Стоит отметить, что если вы пока работаете на локалхосте, то ключ необязателен."
Подскажите, пожалуйста, как можно работать с google maps локально? Я так понимаю, необходимо скачать дистрибутив, поставить...или нет? Заранее спасибо!
#
Natalie
Grin
Natalie, тут имеется ввиду, что не обязательно работать с гуглокартами с сервера, можно просто сделать папку на рабочем столе (к примеру) и там уже все делать.
Дистрибутив ставить тоже не надо, нужно просто подключить файл к странице как сказано в статье.
Natalie
а как получить ключ api google maps? Просто указать в качестве доменного имени localhost?
#
Natalie
Grin
Нет, просто любую строку укажите в качестве ключа, например «google_maps_key»
Mark
Огромное спасибо за весь цикл статей по гугл-картам. Отдельоне спасибо за стиль изложения - он идеальный =)
Илья
Здравствуйте, у моего сайта главная страница выдается под 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
подскажите пожалуйста, в чем может быть проблемма и где найти другой код?

Спасибо.
Grin
Илья, ключ определяется для домена. У вас на сайте когда смотришь его нормальным способом (зайдя на novoebenevo.ru), все ок, а когда вы смотри сайт из кеша (фактически с hghltd.yandex.ru), ключ не подходит
Илья
спасибо. разобрался.
#
Илья
Владимир
Здравствуйте, подскажите плз, как сделать, чтоб при щелчке на маркере выполнялся сценарий Extjs, что-то типа этого, только вместо кнопки должен быть маркер google map
http://www.extjs.com/deploy/dev/examples/message-box/msg-box.html
#
Владимир
Владимир
А точнее как внедрить Flash в google map)?
#
Владимир
AlexTIX
Добрый день.Не подскажете как привязать перетаскиваемый маркер к началу линии?
Родион
Добрый день.
У меня сайт, каталог организации в моем городе. Сам сайт большой. Но хотелось бы чтобы на сайте показывался адрес от гуглмапс... Я так понял что из поля с адресом организации, должен быть как бы импорт адреса для карты?
Как это можно сделать?
www.spravkatver.ru - вот идем к любой организации, просматриваем её подробнее... на странице с просмотром должна быть карта с самим адресом.
Друзья подскажите как сделать с самого начала, как для самого нуба...
#
Родион
VaeR
Больное спасибо все получилось, вот только в IE кракозябра.
#
VaeR
doka
А возможно ли рассчитать расстояние между двумя метками на карте?
#
doka
ditas
Здравствуйте!
Спасибо большое за урок. Привязал карту к сайту, п-ли добавляют метки - все хорошо. Но есть одна проблема. Как можно сделать изменение масштаба по клику на ссылке. Т.е. у меня стоит по умолчанию показ АЗС по городу, а я хочу добавить кнопку (ссылку) при клике на которой просто бы изменялся масштаб, чтобы видеть АЗС по области.
#
ditas
kovpack
статью я прочитал, но не нашел, как и где брать координаты? работаю на одним большим проектом, и там реально куча городов (несколько тысяч координат нужно). как быстро можно узнать координаты заданной точки на карте?
Юрий
у меня аналогичная ситуация с - kovpack, интересно только другое, можно ли вместо установких каждой координаты в отдельности, воспользоваться поиском по карте, указывая адрес ?
#
Юрий
Роман
Ищу способ группировать метки по общим признакам, скажем, "кинотеатры", "рестораны", "стадионы" и при выборе группы скрывать остальные метки. Сталкивался кто-то с такой проблемой? Как решали?
#
Роман
Павел
Grin, приведи пожалуйста пример работы с кластерами. Я никак не могу разобраться. И еще вопрос как сделать чтобы при клике на маркер карта увеличивалась на 1.
millitary
Добрый день
Если у нас есть сервер с внешним статическим ip и открытым доступом к веб-серверу извне - можем ли мы получить API ключ ?
При запросе на получение API ключа и вводе ссылки на сайт в виде http://x.x.x.x получаем сообщение что запрашиваемая страница не найдена :(
#
millitary
millitary
видимо были длительные проблемы со связью, проблема самоустранилась
#
millitary
Lenfer
Спасибо за линк на Clusterer. Ровно час назад столкнулся с этой проблемой.
Никита
Подскажите пожалуйста , если сайт стоит на CMS и доступа к тегам и прочим служебным у меня нет, куда можно перевесить атрибуты вызова карты?
<body onload="initialize()" onunload="GUnload()"> 


#
Никита
Никита
нет доступа к body , head и прочим служебным
#
Никита
Grin
Никита, а к чему у вас есть доступ? Вообще, если у вас CMS, то вы можете зайти по FTP, найти шаблоны и вписать туда все, что нужно.
Никита
Grin а перенести этот загрузчик на другой тег нельзя?
просто боюсь моих познаний не хватит найти на ftp тот файл который отвечает за отдельную (нужную мне)страничку.
#
Никита
Grin
На другой нельзя. Попробуйте найти footer.php или footer.tpl
Никита
спасибо большое!
наверно придется смотреть в сторону яндекс.карт ибо найти таких файло в шаблоне я не смог(
#
Никита
Никита
хотя в папке main в файле index , который лежит в моем шаблоне, прописанна сетка странички

там можно такое прописывать?
#
Никита
Grin
Да, можно там
Никита
спасибо большое еще раз! буду пробовать)

#
Никита
Timerman
У меня стоит аналогичная задача. Пытаюсь на карту России добавить 100 маркеров. Использую kml файл. Но вот как из адресов получить координаты пакетно не понял. Есть ли сервис или программа?
<coordinates>37.5875243,55.7365233,0</coordinates></Point><address>Зубовский б-р, д. 27, стр. 6  </address>
Timerman
Вопрос снят. Извините если потратил Ваше время. На всяки случай ответ тут: _http://code.google.com/intl/ru/apis/maps/documentation/geocoding/
Владимир
Это конечно все круто! Но до сих пор не могу понять, Google Maps умеет работать с железными дорогами?
Тема такая, есть жд портал, нужно сделать прорисовку пути по жд дорогам как на http://ati.su (не рекламирую не пиннайте, привожу как пример)
#
Владимир  
Kirill
Смысл такой, юзеры оставляют заявки с адресами, в заявке есть ссылка "посмотреть на карте", при переходе по ссылке адрес передается методом GET, транслирую в латинские буквы, убираю лишние точки, запятые, из ул. делаю str ну и так далее, составляю запрос, $xml = simplexml_load_file("http://maps.google.com/maps/geo?q=".$zapros."&output=xml&key=ABQI..);
Считываю XML ответ определяю координаты и вывожу карты. Загвoздка в том, что в Донецке (Украина) все русско говорящие, а адреса на украинском, но когда я ввожу в гугле адресс на карте он отображае его и на русском и на украинском, я немогу понять, как искать по русским названиям улиц.
#
Kirill
 Jorgas
Спасибо, очень хорошая статья
#
Jorgas
Eugen
спасибо, помогло)) искал про тени маркеров инфу))
#
Eugen
Дмитрий
У меня возник вопрос, возможно для некоторых он покажется легким! Но как можно добавить поле поиска на гугл карту, чтобы пользователь мог вбить улицу и на карте она показалась
#
Дмитрий
jahzz
доброго! может вы подскажете...
не могу нигде найти инфо о способах оплаты гугль карт для организаций (ну, чтобы не было ограничений по использованию). Цену таки удалось найти, а вот как оплатить - нет.
Хелп!
#
jahzz
Владимир
Не смог найти как под ключи запилить, тоесть, чтоб моя организация не по названию отображалась, а по ключевым словам. Помогите, если знаете

Новый комментарий

как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть
как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть

metin2 pvp metin2 pvp serverler pvp serverler