Выноски Google Maps API KML не отображаются

Я использую Google Maps JavaScript API v3 со слоем KML для отображения карты с пользовательскими маркерами.

Моя карта ссылается на файл KML, который я опубликовал как вложение на сайт Google. После загрузки на карте правильно отображаются все метки PlaceMark из файла KML, но не отображаются всплывающие подсказки.

Редко, когда я нажимаю на булавку, она показывает всплывающую подсказку (5% случаев), тогда ни одна из других булавок не работает. Когда я увеличиваю и уменьшаю масштаб, мои пользовательские изображения булавок время от времени возвращаются к изображению булавки по умолчанию.

Я добавил layerOptions, чтобы явно установить для параметра clickable значение true, а для подавляющего InfoWindows — значение false. Это не изменило поведение воздушного шара.

Я тестировал Chrome v19, Firefox v12 и IE8.

Обновление 1:

Я нашел опечатку в своем KML (воздушный шар). Все еще не работает правильно. Что-то заставляет булавки глючить.

Обновление 2:

v3 теперь работает. Кэширование Google затруднило тестирование. Добавлено «?nocache=0» в URL-адрес KML для предотвращения кэширования. Проблема была в BaloonStyle, но из-за кэширования опечатка осталась. Перенос KML на персональный сервер.

Живая HTML-страница карты (исправлено)

Загрузка KML в реальном времени (исправлено)

Мои рекомендации:


person Jared Deckard    schedule 06.06.2012    source источник
comment
Вы, вероятно, не должны публиковать свой ключ публично   -  person Mano Marks    schedule 07.06.2012
comment
Я протестировал его в Chrome (21 на Mac) и в последней версии Safari, у меня оба работали нормально.   -  person Mano Marks    schedule 07.06.2012
comment
@Mano Marks, невозможно скрыть ключ API. Если это в моем исходном коде, то оно может быть и здесь. (В любом случае, это не мой производственный ключ :P) Что? Это работает для вас? У меня Win7 Pro x32. Собираюсь опубликовать обновление, пробующее APIv2.   -  person Jared Deckard    schedule 07.06.2012
comment
Не заморачивайтесь с V2, через год его можно будет отключить. Да, это работает для меня на Mac, хотя не должно быть проблемой, какой браузер это.   -  person Mano Marks    schedule 07.06.2012


Ответы (3)


Google намеренно кэширует ваш KML. Обходной путь состоит в том, чтобы добавить что-то вроде текущего времени в конец вашего URL-адреса, чтобы он каждый раз был другим:

var kmlFile = 'http://www.myserver.com/my.kml?'+(new Date()).getTime();
var kmlLayer = new google.maps.KmlLayer(kmlFile);
kmlLayer.setMap(myMap);
person Steve Jones    schedule 07.06.2012
comment
Карты Google не должны кэшировать мой KML, если он размещен на моем личном сервере. Что еще хуже, сохранение одного допустимого KML поверх другого действительного KML, который был кэширован, вызывает ошибки в карте. Это ошибка, о которой я сообщил в Google, но спасибо за работу. - person Jared Deckard; 08.06.2012

Мои проблемы:

  • Опечатка в моем теге BalloonStyle
  • Устаревший кеш моего KML-файла

Это было бы проще, если бы:

  • Google Maps JS выдавал ошибки при синтаксическом анализе KML
  • Кэширование Google было достаточно быстрым
  • Я начал тестировать на сервере

Обновление:

Я переместил файл KML на свой сервер, но кеш остался устаревшим после первого изменения. Кажется, кэширование происходит, когда мой объект Google Map загружает оверлей KML. Я убедился, что это не моя система или кэширование моего сервера.

Пины начинают глючить, если я внесу изменения в свой KML, а кеш не обновится. Все мои булавки отображаются в правильном месте, но на одной из булавок не будет воздушного шара. Изменил имя файла, работает отлично!

Обновление 2:

Я сообщил об этом кэшировании как об ошибке в Google Maps JS API.

http://code.google.com/p/gmaps-api-issues/issues/detail?id=4196

Вывод:

Я написал класс ASP.NET/C# для геокодирования адресов и создания документа KML за меньшее время, чем потребовалось для обнаружения этой ошибки.

Хватит так сильно кешировать Google!

person Jared Deckard    schedule 07.06.2012

Ваш KML недействителен. <Name> не является частью спецификации. Измените его на <name>, и все будет хорошо.

person jlivni    schedule 06.06.2012
comment
Спасибо за подсказку, но проблема была в другой опечатке. - person Jared Deckard; 07.06.2012