openlayer4 调用 geoserver的 tms 服务

  基于openlayer4 调用 geoserver 发布的服务,主要使用的是wms服务。最近因为一个项目发布地形数据服务,领导嫌弃sld渲染结果不细腻,要求达到global mapper渲染效果,折腾了两天终于搞定,记录下来作为后期参考。

global mapper 导出带渲染色的tif数据

用global mapper打开制作好的dsm的tif数据,然后点击file->export->export raster/image format,选择geoTIFF,弹出面板中platter 一定要选择 Image optimized platter
这里写图片描述

geoserver 发布

使用geotiff数据源发布服务,然后切片。到这一步出现一个致命问题,发布的服务带有黄色背景颜色。求助度娘无果后,只能到切片源中单个处理png图片黄色部分为透明(纯人工活,高手可以借助python写个小程序自动处理)

openlayer 调用

主要参考了这篇文章 tileUrlFunction 处理逻辑:https://blog.csdn.net/cyoubo/article/details/78030680

<!DOCTYPE html>
<html>
  <head>
    <title>XYZ</title>
    <link rel="stylesheet" href="https://openlayers.org/en/v4.6.5/css/ol.css" type="text/css">
    <!-- The line below is only needed for old environments like Internet Explorer and Android 4.x -->
    <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL"></script>
    <script src="https://openlayers.org/en/v4.6.5/build/ol.js"></script>
  </head>
  <body>
    <div id="map" class="map"></div>
    <script>
        var url="http://192.168.3.16:8080/geoserver/gwc/service/tms/1.0.0/ShanWei%3Adem_tif@EPSG%3A4326@png/";
         var resolutions = [];
         for (var i = 0; i < 19; i++) {
            resolutions[i] = Math.pow(2, 18 - i);
        }  
      var projection=new ol.proj.get("EPSG:4326");
      var map = new ol.Map({
        target: 'map',
        layers: [
          new ol.layer.Tile({source:new ol.source.OSM(),id:"电子地图",visible:true}),
            new ol.layer.Tile({
                source:  new ol.source.XYZ({  
                            projection: projection,
                            tileGrid: ol.tilegrid.createXYZ({extent: projection.getExtent()}),
                            tileUrlFunction: function (tileCoord, pixelRatio, proj) {
                                            return url+(tileCoord[0]-1)+ '/'+tileCoord[1] + '/' + (Math.pow(2,tileCoord[0]-1)+tileCoord[2]) + '.png'; 
                                }  
                            }) 
            })
        ],
        view: new ol.View({
            projection: projection,
            center:[115.55145, 23.01361],
            zoom:10
            })
      });
    </script>
  </body>
</html>
要重新加载在OpenLayers中的GeoServer图层,可以按照以下步骤进行操作。 首先,确保已经在OpenLayers中定义了要加载的图层。可以使用`new ol.layer.Tile`函数来创建一个新的瓦片图层,然后将其添加到地图中。例如: ```javascript var layer = new ol.layer.Tile({ source: new ol.source.TileWMS({ url: 'http://localhost:8080/geoserver/wms', params: {'LAYERS': 'myworkspace:mylayer'}, serverType: 'geoserver' }) }); map.addLayer(layer); ``` 接下来,当需要重新加载图层时,可以使用OpenLayers中的`getSource()`函数来获取图层的源,并调用源的`updateParams()`方法来更新参数。例如: ```javascript // 获取图层的源 var source = layer.getSource(); // 更新参数并重新加载图层 source.updateParams({'time': Date.now()}); ``` 在`updateParams()`方法中,我们传入一个包含需要更新的参数的JavaScript对象。在这个例子中,我们使用`Date.now()`来生成一个随机时间戳,以确保每次更新都是唯一的。 最后,可以使用OpenLayers中的`getLayers()`函数来获取地图中的所有图层,并调用每个图层的`getSource()`和`updateParams()`方法来重新加载它们。例如: ```javascript // 获取地图中的所有图层 var layers = map.getLayers(); // 对每个图层执行重新加载 layers.forEach(function (layer) { var source = layer.getSource(); source.updateParams({'time': Date.now()}); }); ``` 这样,所有在OpenLayers中定义的GeoServer图层都将被重新加载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值