我有一个使用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; .. 。)?
谢谢!
答案 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位于同一文件夹中,则所有相关链接都能正常工作。