2011-03-28 92 views
2

我试图将我的kml样式移动到与OpenLayers一起使用的外部文档。这些样式直接包含在kml文件中时会起作用。openlayers kml与外部风格

起初,我以为我可以使用直KML这与styleUrl标签:

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

然而,当我尝试这样做,map.kml文件永远不会被要求,并标记不要” t出现。我已经验证了styleUrl网址的作用。

我加载使用我的KML:

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

有一些所谓的“风格”和OpenLayers.Format.KML API中的“styleBaseUrl”诱人的选择,但我找不到任何文档他们是为了或如何使用它们。有没有人有这些经验?

回答

2

一种方法可能是,将单独的SLD外部文件与样式一起使用并将其应用于您的GML层。

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

+0

我真的很喜欢这个例子,非常完整和有效。我正在寻找一种方法来过滤基于缩放级别的动态内容,我很确定这就是它。瓦鲁irmao! – 2012-07-12 02:11:43

1

我真的没有任何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每次代码读取数据时,参数似乎都会被初始化和重写,所以我认为这样做不会有任何好处。

+0

是一个以“我真的没有任何KML经验,所以我很抱歉如果这完全关闭”的答案。“真的是一个答案? – 2012-07-12 02:01:06

+1

好吧,我试图在我最初的借口后帮助海报中与KML无关的东西...... – 2012-08-08 10:44:32

2

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

MAXDEPTH:{}整数递归加载外部KML网址,默认最大深度为0:做没有外部获取

有了它,默认为0,我会怀疑它下载0外部KML文件。