2014-04-09 4 views
0

Geoserver 2.5의 WFS 구현에 심각한 문제가 있습니다.OpenLayers> GeoServer WFS 요청 EPSG : 3857

SQL Server 및 PostGIS에 데이터 집합을로드했습니다. 데이터 세트는 몇 가지 점으로 구성되며 기본 EPSG : 3857입니다.

Geometry_Columns 테이블이 SQL Server 연결 용으로 설정되어 있고 Geoserver 설치에서 모든 것이 잘된 것처럼 보입니다.

그러나, OpenLayers를 통해 WFS에 액세스를 시도 :

WFS 1.0.0 | GET | 고정 | SQL 서버>OK

WFS 1.0.0 | GET | 고정 | PostGIS>OK

WFS 1.0.0 | POST | 고정 | SQL 서버>OK

WFS 1.0.0 | POST | 고정 | PostGIS>OK

WFS 1.0.0 | GET | BBOX | SQL 서버>실패

WFS 1.0.0 | GET | BBOX | PostGIS>OK

WFS 1.0.0 | POST | BBOX | SQL 서버>실패

WFS 1.0.0 | POST | BBOX | PostGIS>실패

WFS 1.1.0 | GET | 고정 | SQL 서버>OK (지도 상에 표시되지 않음)

WFS 1.1.0 | GET | 고정 | PostGIS>OK (지도 상에 표시되지 않음)

WFS 1.1.0 | POST | 고정 | SQL 서버>OK

WFS 1.1.0 | POST | 고정 | PostGIS>OK

WFS 1.1.0 | GET | BBOX | SQL 서버>실패

WFS 1.1.0 | GET | BBOX | PostGIS>OK (지도 상에 표시되지 않음)

WFS 1.1.0 | POST | BBOX | SQL 서버>실패

WFS 1.1.0 | POST | BBOX | PostGIS>실패

성공한 유일한 BBOX 필터링 된 요청은 PostGIS 데이터 소스에서 1.0.0 GET입니다.

지오 서버는 테스트를 자체적으로 실행하려는 경우 공개적으로 액세스 할 수 있습니다. 어떤 조언을 환영합니다.정말 SQL Server에서이 작업을 수행해야합니다. 여기

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

내가 POST 요청으로 Openlayers 2.13에서 WFS를 호출하는 방법입니다

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 서버 데이터 소스입니다. PostGIS 데이터 소스의 featureType을 'catastro_pg3857'으로 변경하십시오. 전략을 고정에서 BBOX로 전환하고, 다른 테스트에서 '1.0.0'과 '1.1.0'사이의 버전을 전환합니다.

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) 
}); 

건배, 데니스

+0

방금 ​​MapServer를 실행 중입니다. WFS 1.0.0/1.1.0, GET/POST, Fixed/BBOX는 내 GeoServer 설정에서와 동일한 SQL Server 데이터 소스를 사용하여 MapServer에서 모두 정상입니다. 여전히 이것이 GeoServer와 함께 작동하지 않는 이유를 알고 싶습니다. GeoServer가 MapServer보다 고급이라는 인상을 받고있었습니다. 게다가, 나는 웹 GUI를 좋아한다. –

답변

1

내 첫 번째 시도는 SQLSERVER에서 유효하지 않은 형상을보고하는 것입니다 :

여기 내 GET 요청입니다. 포스트 지스 레이어가 올바르게 표시됩니다. java.lang.RuntimeException가 : 나는 그것을 던져 SQL 서버, org.geoserver.platform.ServiceException에 대한 geoserver에서 일반 KML 출력을 생성

이 때 java.io.IOException : 오류에 대한 CATASTRO_SQL3857

에 대한 계산 경계를 발생 postgis, KML이 오류없이 생성되었습니다.

이 시도 :

업데이트 < TABLENAME 여기 > 세트 기하 구조 = geom.MakeValid();

결과를 알고 싶다면 ...

+0

감사합니다. 가능한 문제가 될 수있는 데이터의 범위를 실제로 설정하지 않았습니다. 필자는 데이터 집합이 점 형상으로 만 구성되기 때문에 형상이 문제라고 생각하지 않습니다. 또 다른 문제점은 Geometry 오브젝트가 SRID 0으로 정의된다는 것입니다. 모든 데이터는 동일한 프로젝션에 저장되며 변환은 필요하지 않습니다. 하지만이 테이블에서 데이터를 요청/사용하려고하는 플러그인 클라이언트에 문제가 될 수 있음을 알 수 있습니다. –

+0

예 SRID가 누락 될 수 있습니다. 업데이트 tablename set geom.STSrid = 3857; – SSA

+0

그게 하나야. 전에 이것에 대해 생각해 봤어야 했어. –

관련 문제