openlayers kml с внешними стилями

#kml #openlayers

#kml #openlayers

Вопрос:

Я пытаюсь перенести свои стили kml во внешний документ для использования с OpenLayers. Стили работают, когда они включены непосредственно в файл kml.

Сначала я подумал, что мог бы использовать для этого прямой kml с тегом styleUrl:

 <styleUrl>http://localhost/map.kml#myIcon</styleUrl>
  

Однако, когда я пытаюсь это сделать, файл map.kml никогда не запрашивается, и маркеры не отображаются. Я убедился, что URL-адрес styleUrl работает.

Я загружаю свой kml с помощью:

 new OpenLayers.Layer.GML('Name', 'kml_path', {
  format: OpenLayers.Format.KML,
    formatOptions: {
      extractStyles: true,
      extractAttributes: true
    },
    projection: map.displayProjection
});
  

В OpenLayers есть несколько заманчивых опций, называемых «styles» и «styleBaseUrl».Формат.KML API, но я не могу найти никакой документации о том, для чего они предназначены или как их использовать. Есть ли у кого-нибудь опыт работы с ними?

Ответ №1:

Одним из способов может быть создание отдельного внешнего файла SLD со стилями и применение его к вашему слою GML.

Взгляните на пример кода SLD OpenLayers на http://openlayers.org/dev/examples/sld.html и просто замените слои примера своим слоем и замените стили в sld-tasmania.xml файл. Таким образом, вам не понадобится опция extractStyles в formatOptions.

Комментарии:

1. мне действительно понравился этот пример, очень полный и эффективный. я искал способ фильтровать динамический контент на основе уровня масштабирования, и я почти уверен, что это он. valeu irmao!

Ответ №2:

В formatOptions попробуйте добавить maxDepth: 10 или какое-то подобное целое число. Вот определение api.

maxDepth: {Целое число} Максимальная глубина для рекурсивной загрузки внешних URL-адресов KML По умолчанию равна 0: внешняя выборка не выполняется

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

Ответ №3:

У меня действительно нет никакого опыта работы с KML, поэтому я сожалею, если это полностью отключено. Я только что прочитал код для слоев KML, особенно для частей стиля. Из вашего styleUrl тега это выглядит так, как styleBaseUrl должно быть http://localhost/map.kml , на основе кода в KML.js:

parseStyleMaps():

 this.styles[(options.styleBaseUrl || "")   "#"   id] =
                    this.styles[(options.styleBaseUrl || "")   styleUrl];
  

parseStyles():

 var styleName = (options.styleBaseUrl || "")   "#"   style.id;
  

styles Параметр, похоже, инициализируется и перезаписывается каждый раз, когда код считывает данные, так что, я думаю, это не принесет никакой пользы.

Комментарии:

1. Это ответ, который начинается со слов «У меня действительно нет никакого опыта работы с KML, поэтому я сожалею, если это полностью отключено. » действительно ответ?

2. ну, я попытался помочь постеру с материалами, не относящимися к KML, после моего первоначального оправдания…