OpenLayers使用WMS加载GeoTiff数据源踩坑记录

前言

OpenLayers最近版本(6.11.0)上看到了使用WebGLTile图层加载GeoTIFF的示例,功能强大,不仅可以在前端直接显示tif影像,还可以做分波段彩色合成,对比度拉伸等色彩上的调整。简单试了下,发现数据源上存在一定的限制
在这里插入图片描述
WebGLTile的source属性接受DataTileSource和TileImage两种source类型,结合示例里的数据源发现WebGLTile图层只接受单张tif或者XYZ切片格式数据源,目前还不支持WMS地图服务,虽然GeoServer的WMS服务支持输出image/tiff。
这时看着 #GeoTIFF tile pyramid这个示例的我灵光一闪,是不是可以正常地用TileWMS加载发布为WMS的影像,设置输出tif格式,同时设置 #tileLoadFunction截胡即将加载的瓦片,将tif瓦片用GeoTIFF tile pyramid里的方法加载到地图上,如下

  1. 构建map和source
// 设置瓦片格网
const tileGrid = new TileGrid({
   
   
  origin: [-180, 90],
  resolutions: [0.703125, 0.3515625, 0.17578125, 8.7890625e-2, 4.39453125e-2],
  tileSizes: [
    [512, 256],
    [1024, 512],
    [2048, 1024],
    [4096, 2048],
    [4096, 4096]
  ]
});
// 一些全局对象
const pyramid = new LayerGroup();
const layerForUrl: any = {
   
   };
const zs = tileGrid.getResolutions().length;
// 构建source
const source = new TileWMS({
   
   
  url: 'http://localhost:8081/geoserver/taihu/wms',
  params: {
   
   
    FORMAT: 'image/tiff',
    VERSION: '1.1.1',
    tiled: true,
    STYLES: '',
    LAYERS: 'workspace:layername'
  },
  tileLoadFunction: (imageTile, src) => {
   
   
  	// 这里截胡瓦片
    useLayer(src, imageTile.tileCoord);
  }
});
// 构建图层和map
const layer = new Layers.Tile({
   
   
 source: source
});
this.map = new Map({
   
   
  target: 'map',
  layers: [layer, pyramid],
  view: new View({
   
   
    projection: 'EPSG:4326',
    center: [0, 0],
    zoom: 0,
    showFullExtent: true
  })
});
  1. 根据瓦片请求地址和xyz构建webgl图层,添加到图层组里
function 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值