添加矢量数据 - 使用 WFS 传输的 GML 格式(可能的错误?)

Posted

技术标签:

【中文标题】添加矢量数据 - 使用 WFS 传输的 GML 格式(可能的错误?)【英文标题】:Adding Vector Data - GML format with WFS Transport (possible bug?) 【发布时间】:2016-10-31 23:17:30 【问题描述】:

我正在尝试通过查询提供 GML 数据的公开可用的 WFS 服务器来向我的 OpenLayers 地图添加功能。

// initalize the map
var map = new ol.Map(
    layers: [
        new ol.layer.Tile(
            // OpenLayers public map server
            source: new ol.source.OSM()
        ),
    ],
    target: 'map',
    view: new ol.View(
        // center on Murica
        center: [-10997148, 4569099],
        zoom: 4
    )
);

var xmlhttp = new XMLHttpRequest();

// execute this once the remote GML xml document has loaded
xmlhttp.onload = function() 

    console.log("GML XML document retrieved.  executing onload handler:");
    var format = new ol.format.GML3();

    var xmlDoc = xmlhttp.responseXML;

    console.log("you will see multiple features in the xml: ");
    console.log(xmlDoc);

    // Read and parse all features in XML document
    var features = format.readFeatures(xmlDoc, 
        featureProjection: 'EPSG:4326',
        dataProjection: 'EPSG:3857'
    );

    console.log("for some reason only a single feature will have been added: ")
    console.log(features);
    console.log("Why is this?");

    var vector = new ol.layer.Vector(
        source: new ol.source.Vector(
            format: format
        )
    );

    // Add features to the layer's source
    vector.getSource().addFeatures(features);

    map.addLayer(vector);
;

// configure a GET request
xmlhttp.open("GET", "http://geoint.nrlssc.navy.mil/dnc/wfs/DNC-WORLD/feature/merged?version=1.1.0&request=GetFeature&typename=DNC_APPROACH_LIBRARY_BOUNDARIES&srsname=3857",
   true);

// trigger the GET request
xmlhttp.send();

这是一个带有错误演示的 CodePen。

http://codepen.io/anon/pen/yamOEK

你可以在这里下载它并打包成一个 html 文件: https://drive.google.com/open?id=0B6L3fhx8G3H_cmp1d3hHOXNKNHM

我可以使用有效的类型名成功地将具有多个功能的整个功能集合下载到我的变量 xmlDoc 中。但是,当我使用 format.ReadFeatures(xmlDoc) 时,OpenLayers GML 格式解析器似乎只从特征集合中提取单个特征,而它应该提取更多。

如果有人能看一看,看看他们是否能弄清楚我做错了什么愚蠢的错误,或者这是 OpenLayers3 中的一个合法错误,那就太好了。非常感谢任何能够提供帮助的人!

【问题讨论】:

交叉发布为gis.stackexchange.com/q/216125/115 【参考方案1】:

添加单个特征是因为读取了整个文档,因此而不是 format.readFeatures(xmlDoc) 解析每个特征。这里是源代码:

    var vector;
    var map = new ol.Map(
        layers: [
            new ol.layer.Tile(
                source: new ol.source.OSM()
            ),
        ],
        target: 'map',
        view: new ol.View(
            center: [-8197020.761224195,8244563.818176944],
            zoom: 4
        )
    );

    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onload = function() 
        var format = new ol.format.GML3();
        var xmlDoc = xmlhttp.responseXML;
        vector = new ol.layer.Vector(
            source: new ol.source.Vector(
                format: format
            )
        );

        for (var i = 1; i < xmlDoc.children[0].children.length; i++) 
            var features = format.readFeatures(xmlDoc.children[0].children[i], 
                featureProjection: 'EPSG:4326'
            );


            features.getGeometry().transform('EPSG:4326', 'EPSG:3857');
            vector.getSource().addFeature(features);
        

        map.addLayer(vector);
        map.getView().fit(vector.getSource().getExtent(), map.getSize())
    ;

    xmlhttp.open("GET", "http://geoint.nrlssc.navy.mil/dnc/wfs/DNC-WORLD/feature/merged?version=1.1.0&request=GetFeature&typename=DNC_APPROACH_LIBRARY_BOUNDARIES&srsname=3857",
        true);

    // trigger the GET request
    xmlhttp.send();

这是 CodePen 结果。 http://codepen.io/anon/pen/bwXrwJ

【讨论】:

它工作赞美 dev9 所有 EPSG 之神

以上是关于添加矢量数据 - 使用 WFS 传输的 GML 格式(可能的错误?)的主要内容,如果未能解决你的问题,请参考以下文章

Openlayers 3 - wfs-t:更改几何字段的名称

Openlayers 标记偏移(不在正确的位置)

OpenLayers 6.5.0 不解析具有多种特征类型的 GML 3.2

使用 WFS 地理服务器的 Geomesa accumulo CURD 数据操作

如何使用 OpenLayers 将属性插入 WFS?

使用GML的八方向自动寻路