【问题标题】:openlayers kml with external styles带有外部样式的openlayers kml
【发布时间】:2011-03-28 15:38:41
【问题描述】:

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

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

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

但是,当我尝试这样做时,map.kml 文件永远不会被请求,并且标记不会显示。我已经验证 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 中有一些名为“styles”和“styleBaseUrl”的诱人选项,但我找不到任何关于它们的用途或如何使用它们的文档。有没有人有这方面的经验?

【问题讨论】:

    标签: kml openlayers


    【解决方案1】:

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

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

    【讨论】:

    • 我真的很喜欢这个例子,非常完整和有效。我正在寻找一种基于缩放级别过滤动态内容的方法,我很确定就是这样。 valeu irmao!
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 答案是否以“我真的没有任何 KML 经验,所以如果完全关闭,我很抱歉。”真的是答案吗?
      • 好吧,在我最初的借口之后,我试图帮助发帖者处理与 KML 无关的东西......
      猜你喜欢
      • 1970-01-01
      • 2013-04-27
      • 2017-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      相关资源
      最近更新 更多