Openlayers 3 用Openlayers 3加载GML层

Openlayers 3 用Openlayers 3加载GML层,openlayers-3,geoserver,gml,ogc,Openlayers 3,Geoserver,Gml,Ogc,我正在尝试将GML文件加载到向量层,并将其绘制在地图上。由于某些原因,这些特征没有显示在地图上,尽管它们被解析并添加到矢量层 我用一个来自Geoserver的GML文件(对源代码做了一些小的修改)试过了,openlayers 3似乎没有问题 我是否遗漏了什么,或者GML解析器是否不支持自定义文件 代码: 原始的GML文件可从以下网址获得:。我在本地复制了它,以避免CORS一切似乎都已就绪,但尽管该代码加载了这些功能,但这些功能仍然需要与它们关联的几何体。这可以通过创建一个ol.geom,在本例中

我正在尝试将
GML
文件加载到向量层,并将其绘制在地图上。由于某些原因,这些特征没有显示在地图上,尽管它们被解析并添加到矢量层

我用一个来自
Geoserver
GML
文件(对源代码做了一些小的修改)试过了,
openlayers 3
似乎没有问题

我是否遗漏了什么,或者
GML
解析器是否不支持自定义文件

代码:


原始的
GML
文件可从以下网址获得:。我在本地复制了它,以避免CORS

一切似乎都已就绪,但尽管该代码加载了这些功能,但这些功能仍然需要与它们关联的几何体。这可以通过创建一个
ol.geom
,在本例中是一个
ol.geom.Point
,来实现

代码:

var vector=新ol.layer.vector({
来源:新ol.source.Vector({
格式:格式
})
});
/**这是新的**/
对于(变量i=0;i
是的,您有功能,但没有几何图形(例如,在阅读后检查
功能[0].getGeometry()
)。因此,
readFeatures
不能正常工作。顺便说一下,您应该编写
featureProjection:'EPSG:3857'
dataProjection:'EPSG:4326'
,在这种情况下,当您的GML在4326;)@谢尔盖科洛索夫,你说得对。我大约在半小时前找到了解决办法。我会发布它。@SergeyKolosov,
featureProjection
dataProjection
在这种情况下似乎没有必要。是的,因为您从属性中获取坐标,然后手动转换它们
(function() {} (
        'use strict';

        var map = new ol.Map({
            target: 'map',
            layers: [
                new ol.layer.Tile({
                    source: new ol.source.OSM()
                })
            ],
            view: new ol.View({
                center: ol.proj.transform([0, 30], 'EPSG:4326', 'EPSG:3857'),
                zoom: 2
            })
        });

        var xmlhttp = new XMLHttpRequest();

        xmlhttp.open("GET", "/echo/xml/", true);
        xmlhttp.onload = function () {
            var format = new ol.format.GML2();

            var xmlDoc = xmlhttp.responseXML;

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

            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);
        };
        xmlhttp.send();
));
var vector = new ol.layer.Vector({
    source: new ol.source.Vector({
        format: format
    })
});

/** This is new **/
for (var i = 0; i < features.length; i++) {

    var coordinates = [parseFloat(features[i].get('long')), parseFloat(features[i].get('lat'))];
    // Create the new geometry object
    var geom = new ol.geom.Point(ol.proj.transform(coordinates, 'EPSG:4326', 'EPSG:3857'));

    features[i].setGeometry(geom);
}
/****/

vector.getSource().addFeatures(features);