我有一个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.png与SIMPLE.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在同一个文件夹中,那么所有的相对链接都可以正常工作。