覆盖 Open Layers 3 中自动计算的 TileWMS 请求属性
Posted
技术标签:
【中文标题】覆盖 Open Layers 3 中自动计算的 TileWMS 请求属性【英文标题】:Overwrite automatically calculated TileWMS request properties in Open Layers 3 【发布时间】:2015-07-14 21:56:58 【问题描述】:我有一个 GeoServer 2.5 实例,它在 EPSG:4326 中托管图层服务,并被具有默认 EPSG:3857 投影的 OpenLayers 3 地图使用。使用基本的 wms 层一切正常,但气泡和标签的碎片需要我使用 Single Tile 或 Meta-Tiled WMS 请求。
我正在使用 geoserver 所需的属性构建图层对象,但 OpenLayers 会覆盖其中的许多属性,我认为这会阻止 Meta-Tiling 实际工作。
这在 Leaflet 中效果很好,所以我知道 GeoServer 上没有问题,所以一定有我遗漏的东西。非常感谢任何帮助。
var mapBounds = this.getCurrentBounds('EPSG:4326');
var mapSWOrigin = [mapBounds._southWest.lng, mapBounds._southWest.lat].toString();
var wmsLayer = new ol.layer.Tile(
extent: [-20026376.39, -20048966.10, 20026376.39, 20048966.10], //epsg:3857 extent
preload: true,
source: new ol.source.TileWMS(
url: window.location.origin+"/geoserver/wms/",
params:
'LAYERS': geoserverName,
'VERSION': '1.3',
'SRS': 'EPSG:4326', // THIS GETS OVERWRITTEN. also tried EPSG:3857
'BBOX': extent, //THIS GETS OVERWRITTEN. Tried extent of the current state of the map and the extent of the projection (ex: [21.99937, -18.07947, 33.7057, -8.22436])
'TILED': true,
'STYLES': layer.getSldName() || "",
'TILESIZE': 256,
'FORMAT': 'image/png',
'TILESORIGIN': mapSWOrigin
,
serverType: 'geoserver'
),
visible: true
);
从浏览器控制台捕获的结果请求:
https://localhost:8443/geoserver/wms/?SERVICE=WMS
&VERSION=1.3.0
&REQUEST=GetMap
&FORMAT=image%2Fpng
&TRANSPARENT=true
&LAYERS=geodashboard%3Alv_sjym3xbpypz4un9nm3xnvy6873p1k1nn_1psl34vde5
&BBOX=3757032.814272985%2C-1252344.271424327%2C5009377.085697313%2C6.984919309616089e-10 // NOTICE THIS IS NOT EPSG:4326 UNITS
&TILED=true
&STYLES=lv_sjym3xbpypz4un9nm3xnvy6873p1k1nn_1psl34vde5
&TILESIZE=256
&TILESORIGIN=9.428462734375003%2C-18.869002237258456
&WIDTH=282
&HEIGHT=282
&CRS=EPSG%3A3857 // NOTICE THIS IS NOT EPSG:4326
&FORMAT_OPTIONS=dpi%3A99
【问题讨论】:
认为这个问题应该在gis.stackexchange.com 中。 【参考方案1】:您使用的是 SRS,而不是 WMS 1.3 所需的 CRS。
最好的问候, 格哈德
【讨论】:
您必须在地图投影中请求图层,因此 OpenLayers 是正确的。 @Gerhard - 谢谢,但我也已经尝试过使用 CRS。很抱歉没有在问题中说明这一点。【参考方案2】:试用示例代码
var z = tileCoord[0];
var x = tileCoord[1];
var y = tileCoord[2];
var tileGrid = source.getTileGrid();
var tileGridOrigin = tileGrid.getOrigin();
var tileSizeAtResolution = tileGrid.getTileSize(z) * tileGrid.getResolution(z);
return [
tileGridOrigin[0] + tileSizeAtResolution * x,
tileGridOrigin[1] + tileSizeAtResolution * y,
tileGridOrigin[0] + tileSizeAtResolution * (x + 1),
tileGridOrigin[1] + tileSizeAtResolution * (y + 1)
];
【讨论】:
以上是关于覆盖 Open Layers 3 中自动计算的 TileWMS 请求属性的主要内容,如果未能解决你的问题,请参考以下文章
layer open 弹出的窗口,执行完相关操作时怎么自动关闭