#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, после моего первоначального оправдания…