本周基于arcgis/core组件,利用arcgis api for js 4.22版本加载GeoServer发布的同一数据源的wms和wfs服务,出现了偏移的问题。
分析:同一数据源不同的访问方式,出现了偏移,这是很严重的问题。初步判断为js api加载方式的问题,或者是geoserver中的配置问题。
探索一:js api是利用WFSLayer来加载WFS服务,通过页面调试,发现访问的请求中epsg是4326,而我们的数据是4490,找到问题了。但在加载WFSLayer时设置spatialReference,设置后依然无效。包括MapView设置spatialReference,依然无效。
在网上查找相关资料,针对一些针对3.x版本中同仁们遇到的问题,尝试采用如下方式加载WFSLayer(代码段1):
getCapabilities('https://zjgt.portal.com:9080/geoserver/ows').then((capabilities) => {
// create a list of the returned feature types
getWFSLayerInfo(capabilities, 'polygona', 'https://zjgt.portal.com:9080/zjgt', { spatialReference: viewSpatialReference }).then((layerInfo) => {
// create a list of the returned feature types
const layer = WFSLayer.fromWFSLayerInfo(layerInfo)
// add layer to the map
map.add(layer)
结果,很遗憾问题依然存在,虽然spatialReference通过调试发现已经正确了。这就很尴尬了,还有别的问题。
经过疯狂的查找,最终发现geoserver返回的坐标小数点后面只有4位。这。。。。。
GeoServer这么坑的吗?于是登录GeoServer,查看相关配置。最后找到了如下配置:
修改后 ,发现无效。在服务器上重启相关容器,发现依然无效。。。。。。。
简直崩溃,但我还是认为就是这里的问题。在本机(windows)上查看这个地方,发现是8。修改后,查看服务情况,发现果然改了。终于确定问题。
那么服务器上的这个版本GeoServer如何解决呢?重装一个版本??
现象:修改值后,能够成功保存,但是查看服务没有生效。暂且认为是GeoServer的bug。到服务器上找找相关配置:
修改后,果然解决了。
这里其实还有一个问题:我在本机(windows)安装与服务器上同一个版本的GeoServer也没有这个配置问题,哎。
到这里,这个问题就解决了,但是还有一个现象记录一下。采用代码段1加载wfs服务的时候(图片3):
但是,调试的时候发现代码段1中:
spatialReference已经改为:4490,且不再偏移。
回过头来用下列加载方式:
const layer = new WFSLayer({
url: 'https://zjgt.portal.com:9080/geoserver/ows',
name: 'zjgt:polygona'
})
map.add(layer)
图片3中依然是4326,但是不再偏移。这里我认为是易智瑞的一个bug。