Openlayers 3 KML导出writeFeatures()无法正常工作

时间:2016-02-25 06:25:23

标签: javascript kml openlayers-3

我正在使用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时,我得到了数组中所有绘制的特征。请帮我解决这个问题

3 个答案:

答案 0 :(得分:3)

您可以导出功能而无需克隆并手动转换它们。用

替换上面的整个代码
var features = layer.getSource().getFeatures();
var string = new format.KML().writeFeatures(features, {
  featureProjection: map.getView().getProjection()
});

上面的代码段假定map变量包含您的ol.Map个实例。

请注意maxDepth上没有internalProjectionexternalProjectionol.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。

https://github.com/mapbox/tokml