OpenLayers> GeoServer WFS请求EPSG:3857

时间:2014-04-09 19:17:27

标签: sql-server-2008 openlayers postgis geoserver

Geoserver 2.5中的WFS实施存在严重问题。

我将数据集加载到SQL Server和PostGIS中。数据集由几个点组成,位于原生EPSG:3857。

为SQL Server连接设置了Geometry_Columns表,Geoserver设置中的所有内容都显示正常。

但是,尝试通过OpenLayers访问WFS:

WFS 1.0.0 | GET |固定| SQL Server>的确定

WFS 1.0.0 | GET |固定| PostGIS>的确定

WFS 1.0.0 | POST |固定| SQL Server>的确定

WFS 1.0.0 | POST |固定| PostGIS>的确定

WFS 1.0.0 | GET | BBOX | SQL Server>的失败

WFS 1.0.0 | GET | BBOX | PostGIS>的确定

WFS 1.0.0 | POST | BBOX | SQL Server>的失败

WFS 1.0.0 | POST | BBOX | PostGIS> 失败

WFS 1.1.0 | GET |固定| SQL Server> 确定(但未在地图上显示)

WFS 1.1.0 | GET |固定| PostGIS> 确定(但未在地图上显示)

WFS 1.1.0 | POST |固定| SQL Server>的确定

WFS 1.1.0 | POST |固定| PostGIS>的确定

WFS 1.1.0 | GET | BBOX | SQL Server>的失败

WFS 1.1.0 | GET | BBOX | PostGIS> 确定(但未在地图上显示)

WFS 1.1.0 | POST | BBOX | SQL Server>的失败

WFS 1.1.0 | POST | BBOX | PostGIS>的失败

唯一成功的BBOX过滤请求是PostGIS数据源上的1.0.0 GET。

如果有人想为自己运行测试,则可以公开访问GeoServer。欢迎任何建议。我真的需要使用SQL Server。

http://developer.system-ns.net:8080/geoserver/MobileSurvey/ows?service=WFS&request=getcapabilities

以下是我如何将Openlayers 2.13中的WFS称为POST请求:

var wfsLayer = new OpenLayers.Layer.Vector('CATASTRO', {
    projection: 'EPSG:3857',
    strategies: [new OpenLayers.Strategy.Fixed()],
    protocol: new OpenLayers.Protocol.WFS({

        version: '1.0.0',
        url: 'http://developer.system-ns.net:8080/geoserver/MobileSurvey/wfs',
        srsName: 'EPSG:3857',
        featurePrefix: 'MobileSurvey',
        featureType: 'CATASTRO_SQL3857',
        geometryName: 'GEOMETRY',
        featureNS: 'http://argeomatica.com/MobileSurvey'

    })
});

这是SQL Server数据源。将featureType更改为PostGIS数据源的'catastro_pg3857'。我将策略从Fixed切换到BBOX,并将“1.0.0”和“1.1.0”之间的版本切换为不同的测试。

这是我的GET请求:

var wfsOptions = {
    url: 'http://developer.system-ns.net:8080/geoserver/MobileSurvey/ows?',
    params: {
        request: 'GetFeature',
        service: 'WFS',
        version: '1.0.0',
        typeName: 'catastro_pg3857',
        srsName: 'EPSG:3857'
    },
    format: new OpenLayers.Format.GML({
        featureNS: 'http://argeomatica.com/MobileSurvey',
        geometryName: 'GEOMETRY'
    })
}
wfsLayer = new OpenLayers.Layer.Vector('CATASTRO', {
    projection: 'EPSG:3857',
    strategies: [new OpenLayers.Strategy.BBOX()],
    visibility: true,
    protocol: new OpenLayers.Protocol.HTTP(wfsOptions)
});

干杯, 丹尼斯

1 个答案:

答案 0 :(得分:1)

我的第一次尝试是查看sqlserver中的无效几何。您的postgis图层显示正确。

当我从geoserver为sql server生成普通KML输出时,它会抛出,org.geoserver.platform.ServiceException:java.lang.RuntimeException:java.io.IOException:计算CATASTRO_SQL3857的边界时发生错误

对于postgis,生成的KML没有错误。

试试这个:

更新<表名在这里> set geom = geom.MakeValid();

很想知道结果......