带有外部样式的openlayers kml

带有外部样式的openlayers kml,kml,openlayers,Kml,Openlayers,我正在尝试将我的kml样式移动到一个外部文档中,以便与OpenLayers一起使用。当样式直接包含在kml文件中时,这些样式才起作用 起初,我认为我可以使用straight kml和styleUrl标记: <styleUrl>http://localhost/map.kml#myIcon</styleUrl> OpenLayers.Format.KML API中有一些诱人的选项称为“样式”和“styleBaseUrl”,但我找不到任何关于它们的用途或使用方法的文档。有人

我正在尝试将我的kml样式移动到一个外部文档中,以便与OpenLayers一起使用。当样式直接包含在kml文件中时,这些样式才起作用

起初,我认为我可以使用straight kml和styleUrl标记:

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

OpenLayers.Format.KML API中有一些诱人的选项称为“样式”和“styleBaseUrl”,但我找不到任何关于它们的用途或使用方法的文档。有人有过这些方面的经验吗?

一种方法是,拥有一个单独的SLD外部文件和样式,并将其应用于GML层


请查看位于的SLD OpenLayers代码示例,将示例层替换为您的层,并替换SLD-tasmania.xml文件中的样式。这样,您就不需要formatOptions中的extractStyles选项。

我真的没有任何KML方面的经验,因此如果完全关闭,我很抱歉。我只是阅读了KML层的代码,特别是样式部分。从
styleUrl
标记中,它看起来像
styleBaseUrl
应该是
http://localhost/map.kml
,基于KML.js中的代码:

parseStyleMaps():

parseStyles():


styles
参数似乎在每次代码读取数据时都会初始化和重写,因此我认为这不会有任何好处。

在formatOptions中,尝试添加maxDepth:10或类似的整数。下面是api的定义

maxDepth:{Integer}递归加载外部KML URL的最大深度默认为0:不进行外部获取


如果默认为0,我会怀疑它下载了0个外部kml文件。

是一个以“我真的没有kml方面的经验,所以如果这完全不存在,我很抱歉”开头的答案。真的是一个答案吗?嗯,在我最初的借口之后,我试图帮助海报处理与kml无关的东西……我真的很喜欢这个例子,非常完整有效。我一直在寻找一种基于缩放级别过滤动态内容的方法,我很确定就是这样。瓦鲁·伊尔茂!
new OpenLayers.Layer.GML('Name', 'kml_path', {
  format: OpenLayers.Format.KML,
    formatOptions: {
      extractStyles: true,
      extractAttributes: true
    },
    projection: map.displayProjection
});
this.styles[(options.styleBaseUrl || "") + "#" + id] =
                    this.styles[(options.styleBaseUrl || "") + styleUrl];
var styleName = (options.styleBaseUrl || "") + "#" + style.id;