我正在使用OpenLayers版本:v3.13.0,我正在尝试导出我的图层中的所有fetaures。我的代码如下
var projection = ol.proj.get('EPSG:3857');
var format = new ol.format.KML({
'maxDepth': 10,
'extractStyles': true,
'internalProjection': projection,
'externalProjection': projection
});
var newfeatures = [];
var vectorSource = layer.getSource();
vectorSource.forEachFeature(function(feature) {
var clone = feature.clone();
clone.setId(feature.getId()); // clone does not set the id
clone.getGeometry().transform(projection, 'EPSG:4326');
newfeatures.push(clone);
});
//console.log(newfeatures);
var string = new ol.format.KML().writeFeatures(newfeatures);
//console.log(string);
我收到错误 “未捕获的TypeError:无法读取未定义的属性'长度'”
当我控制变量newfeatures时,我得到了数组中所有绘制的特征。请帮我解决这个问题
答案 0 :(得分:3)
您可以导出功能而无需克隆并手动转换它们。用
替换上面的整个代码var features = layer.getSource().getFeatures();
var string = new format.KML().writeFeatures(features, {
featureProjection: map.getView().getProjection()
});
上面的代码段假定map
变量包含您的ol.Map
个实例。
请注意maxDepth
上没有internalProjection
,externalProjection
和ol.format.KML
选项。
答案 1 :(得分:1)
使用3857投影书写功能
function GetKMLFromFeatures(features) {
var format = new ol.format.KML();
var kml = format.writeFeatures(features, {featureProjection: 'EPSG:3857'});
return kml;
}
答案 2 :(得分:0)
直接的kml转换没有奏效。所以第一个功能转换为GEOJSON。 然后使用以下库将此GEOJSON转换为kml。