我正在尝试将我的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'的诱人选项,但我找不到任何关于它们的用途或如何使用它们的文档。有没有人有这些经验?
答案 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
参数似乎都被初始化并重写,所以我认为这不会有任何好处。