是否有可能加载KML图标没有一个完整的HREF在他们的样式



我有一个SIMPLE用ArcMap生成的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.pngSIMPLE.KML在同一个文件夹中。

问题是,图标'没有找到'的OL3当我试图加载地图中的kml(如http://openlayers.org/en/v3.9.0/examples/kml.html,与extractStyles:true),因为它认为href的绝对url,而不是一个相对的。

我想知道是否有一个解决方案,而不必编辑。kml(我有相当多的kml,仍然没有一个明确的文件夹结构)。

ol.format中加入一些选项不是很有用吗?这个用例的KML ('localResources': true'…)?

谢谢!

你可以使用带有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位于"data/KML",并且引用了相对图标,那么OpenLayers将解析相对于HTML文档上下文的本地图标。那么icon40.png必须和HTML页面放在一起。如果KML文件和HTML在同一个文件夹中,那么所有的相对链接都可以正常工作。

最新更新