【发布时间】:2018-11-25 01:35:46
【问题描述】:
我已经配置了一个带有 PostGIS v2.4.2 扩展的 PostgreSQL v9.5.12 数据库。我使用 GeoServer v2.13.1 将数据库表呈现为 WMS 图层,并使用 Openlayers (v4.6.5) 在 web 应用程序中将它们可视化。使用的投影是EPSG:31255。
但是,WMS 图层并未在所有缩放级别上正确显示。有时瓷砖会被切断(参见屏幕截图 1),或者不是图层中的每个点都被渲染(参见屏幕截图 2)。在某些级别上,尤其是在放大时,图层根本不显示。这些图层在 GeoServer 本身以及将它们添加到 qGIS 时正确显示。
我也将此设置和代码用于其他层,并且运行顺畅,但是这些层使用不同的投影 (ESPG:4326)。
我该如何解决这个问题?
编辑: 这是一个包含 EPSG:31255 定义的代码 sn-p,但实际上并未将其用于 wmsSource。
// proj4js custom projection
proj4.defs("EPSG:31255","+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs");
var proj31255 = ol.proj.get('EPSG:31255');
proj31255.setExtent([-115771.3204, 130037.7189, 115359.4571, 408002.5351]);
var wmsSource = new ol.source.TileWMS({
url: geoserver_getcapabilities_url + geoserver_workspace + '/wms?',
params: {
'LAYERS': wms_layer_name
},
serverType: 'geoserver',
//projection: 'EPSG:31255'
});
var wmsLayer = new ol.layer.Tile({
source: wmsSource,
name: 'selected_wms_layer',
visible: true
});
var osmLayer = new ol.layer.Tile({
source: new ol.source.OSM()
});
var view = new ol.View({
center: map_centre,
zoom: initial_zoom_level,
projection: 'EPSG:3857'
});
/** Set-up the map */
var map = new ol.Map({
target: 'map',
layers: [osmLayer, wmsLayer, point_layer],
overlays: [overlay],
view: view,
loadTilesWhileAnimating: true,
loadTilesWhileInteracting: true,
controls: ol.control.defaults().extend([
new ol.control.OverviewMap()
])
});
【问题讨论】:
-
EPSG:4326 是内置在 OpenLayers 中的,我认为 31255 不是这种情况。您可以仔细检查投影的定义(顺便说一句,您使用的是 proj4js 吗?)另外,使用网络调试选项卡,您能否确认 WMS 切片请求中没有失败?是否有可能使用最少的代码来进一步挖掘您的问题?
-
确实,我没有使用 proj4s 声明 EPSG:31255。我现在添加了该部分,但该图层根本不可见。我需要更改地图的视图吗?我按照这里的答案,只改变了 WMS 的投影,而不是地图本身的投影:gis.stackexchange.com/questions/143883/…
-
显然图层仍然在地图上渲染,只是不在它应该在的位置。
标签: javascript openlayers postgis geoserver wms