是否可以在样式中加载没有完整HREF的KML图标?

时间:2015-10-01 15:49:47

标签: kml openlayers-3

我有一个使用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 位于同一文件夹中。

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

我想知道它有一个解决办法,无需编辑.kml(我有相当多的kmls,但仍然没有明确的文件夹结构)。

ol.format.KML 中为这个用例提供某种选项是不是很有用(&#39; localResources&#39;:true&#39; .. 。)?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用带有KML源的OpenLayers Vector,它将提取和使用带有绝对或相对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位于&#34; data / kml&#34;然后引用相对图标,然后OpenLayers将解析相对于HTML文档上下文的本地图标。然后icon40.png必须与HTML页面位于同一位置。如果KML文件与HTML位于同一文件夹中,则所有相关链接都能正常工作。