openlayers kml与外部风格

时间:2011-03-28 15:38:42

标签: kml openlayers

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

起初我以为我可以使用styleUrl标签直接使用kml:

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

但是,当我尝试这样做时,map.kml文件永远不会被请求,并且标记不会显示。我已经验证了styleUrl url的工作原理。

我正在使用以下方式加载我的kml:

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

在OpenLayers.Format.KML API中有一些名为'styles'和'styleBaseUrl'的诱人选项,但我找不到任何关于它们的用途或如何使用它们的文档。有没有人有这些经验?

3 个答案:

答案 0 :(得分:2)

可以采用单独的SLD外部文件,并将其应用到GML图层。

http://openlayers.org/dev/examples/sld.html查看SLD OpenLayers代码示例,只需用您的图层替换示例图层,然后替换sld-tasmania.xml文件中的样式。这样,您就不需要formatOptions中的extractStyles选项。

答案 1 :(得分:2)

在formatOptions中,尝试添加maxDepth:10或某个此类整数。这是api的定义。

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

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

答案 2 :(得分:1)

我真的对KML没有任何经验,所以如果完全关闭,我很抱歉。我刚读了KML图层的代码,特别是样式部分。根据KML.js中的代码,styleUrl标记看起来styleBaseUrl应为http://localhost/map.kml

parseStyleMaps():

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

parseStyles():

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

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