openlayers kml с внешними стилями - PullRequest
2 голосов
/ 28 марта 2011

Я пытаюсь переместить мои стили 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'.API Format.KML, но я не могу найти никакой документации о том, для чего они предназначены и как их использовать.У кого-нибудь есть опыт работы с ними?

Ответы [ 3 ]

2 голосов
/ 04 мая 2011

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

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

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

2 голосов
/ 01 апреля 2011

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

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

1 голос
/ 04 апреля 2011

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

...