【问题标题】:Is it possible to load KML Icons without a full HREF in their styles?是否可以在没有完整 HREF 样式的情况下加载 KML 图标?
【发布时间】:2015-10-01 15:49:46
【问题描述】:

我有一个使用 ArcMap 生成的 SIMPLE.KML 文件,其中包含如下矢量:

<Placemark id="ID_0001">
  <name>0</name>
  <styleUrl>#IconStyle00</styleUrl>
  <Point>
    <altitudeMode>clampToGround</altitudeMode>
    <coordinates> -6.745,43.568,1.511693</coordinates>
  </Point>
</Placemark>

还有这种风格:

<Style id="IconStyle00">
<IconStyle>
  <Icon><href>SYMBOL_XXX.png</href></Icon>
  <scale>1.0</scale>
</IconStyle>
<LabelStyle>
  <color>00000000</color>
  <scale>0.000000</scale>
</LabelStyle>
<PolyStyle>
  <color>ff000000</color>
  <outline>0</outline>
</PolyStyle>
</Style>

SYMBOL_XXX.png 文件与 SIMPLE.KML 位于同一文件夹中。

问题是当我尝试在地图中加载 kml 时,OL3 的图标“未找到”(如在 http://openlayers.org/en/v3.9.0/examples/kml.html 中,使用 extractStyles:true),因为 它认为 href 是绝对 url ,而不是相对的。

我想知道有一种解决方法,无需编辑 .kml(我有大量的 kmls,但仍然没有明确的文件夹结构)。

对于这个用例('localResources': true'...),在 ol.format.KML 中有某种选项不是很有用吗?

谢谢!

【问题讨论】:

    标签: kml openlayers-3


    【解决方案1】:

    您可以将 OpenLayers Vector 与 KML 源一起使用,它将提取和使用具有绝对或相对 URL 的样式。

    var vector = new ol.layer.Vector({
      source: new ol.source.Vector({
        url: 'data/kml/2012-02-10.kml',
        //format: new ol.format.KML()
        format: new ol.format.KML({extractStyles: true})
      })
    });
    

    注意 extractStyles 默认为 true,因此上面带有和不带有 extractStyles 参数的格式行都做同样的事情。见http://openlayers.org/en/v3.9.0/apidoc/ol.format.KML.html

    但是,诀窍是相对图标是相对于 HTML 文档上下文而不是 KML 文件。

    KML 示例:

    <Style id="style-Restaurant">
      <IconStyle>
        <scale>0.7</scale>
        <Icon>              
          <href>icon40.png</href>
        </Icon>
      </IconStyle>
    </Style>
    

    如果 KML 位于“data/kml”并且引用了相关图标,则 OpenLayers 将解析相对于 HTML 文档上下文的本地图标。然后 icon40.png 必须与 HTML 页面位于同一位置。如果 KML 文件与 HTML 位于同一文件夹中,则所有相关链接都可以正常工作。

    【讨论】:

    • 感谢您的回答,Jason,但我无法将我的 kml 收藏移至该级别并在那里“爆炸”其相关内容(图标、照片、徽标...)。这将是一团糟!关键在于您的句子:“相对图标是相对于 HTML 文档上下文而不是 KML 文件。”我想知道是否有办法获得第二个选项,而不是第一个。现在,我正在探索我的 JavaScript 中 kml 的“即时”转换,在 ajax 请求后更改其内容,但我希望有一种更清洁的方法。再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 2011-07-07
    • 2011-09-01
    • 1970-01-01
    • 2012-01-16
    相关资源
    最近更新 更多