hongfaqiu / TIFFImageryProvider

Load GeoTIFF/COG(Cloud optimized GeoTIFF) on Cesium
https://tiff-imagery-provider.opendde.com/?panel=layer
MIT License
52 stars 10 forks source link

在1.6.1版本的时候,加载较大的tif图会把整个TIF当下来 #1

Closed xmsuperman closed 1 year ago

xmsuperman commented 1 year ago

@1.6.1,我的tif大小是几百M,TIF格式正确,在ol中加载是正确的

hongfaqiu commented 1 year ago

有可能是你的cogtif没有经过gdal处理产生的min/max值,库中的处理是获取最大一张瓦片,并计算最大最小值,这一步可能会下载很大的数据量。 如果能提供你产生错误的tif(在线地址即可),可以更好地帮助排除bug

xmsuperman commented 1 year ago

https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/36/Q/WD/2020/7/S2A_36QWD_20200701_0_L2A/B04.tif

这个tif我当到本地,用ol加载是正确的,用1.6.1的例子,在请求第一个64K的头以后,第二次会把剩下的全部请求回来,导致浏览器out of memory

xmsuperman commented 1 year ago

最大最小值,在文件头里注明了,而且api里有设置最大最小值的接口,还需要再根据文件进行计算么?

hongfaqiu commented 1 year ago

确实是没有读取到最大最大值,所以在请求最大的那张瓦片,我修改一下逻辑,如果填了最大最小值就不再自动获取,自动获取也只请求最小的瓦片,这样可以避免这些问题

xmsuperman commented 1 year ago

OK,谢谢,辛苦作者了。 这个问题在2.0.1也重现了。 建议:如果需要通过数据计算最大最小值,可以通过获取影像金字塔的分辨率最低的那一级,用来计算最大最小值,这样的数据量是最低的。 另外2.0.1的webgl渲染效率提高很多,同时1.6.1时跨180度的问题应该也被修正了

hongfaqiu commented 1 year ago

1.6.2版本已经修复,新建了一个v1分支,现在获取某个波段最大最小值的方案如下:

  1. 获取tiff头中的gdal信息:STATISTICS_MINIMUM/STATISTICS_MAXIMUM
  2. 获取在r,g,b配置中添加了的对应波段的min/max值
  3. 获取金字塔分辨率最低一级的瓦片,计算最大最小值
xmsuperman commented 1 year ago

额,作者兄弟,2.0.1版本同样的BUG不修正一下么?

https://s2downloads.eox.at/demo/Sentinel-2/3857/R10m.tif 另外这个数据加载直接报错了

我简单的看了一下,代码逻辑里是假定多通道一定是RGB颜色渲染?

hongfaqiu commented 1 year ago

v2版本准备重做了,之前发布的v2版本的npm包准备撤回,会有很多不兼容的更新

hongfaqiu commented 1 year ago

感谢测试,我明天再修复这些问题,刚百度了一下,确实是我的锅,多通道可能是非256色的色彩位

xmsuperman commented 1 year ago

建议新版本参考一下ol中关于geotiff.js的实现, 1、通道方面的设计,希望支持多通道单值渲染,例如:通道1风向,通道2风速; 2、希望支持自动归一化渲染(通过开关,把任意值域归一化的0-255)

hongfaqiu commented 1 year ago

多通道单值渲染指的是波段计算器之类的功能吗? 至于第二点,现在是归一化到0-255的设计,但似乎在渲染真彩色方面有问题

xmsuperman commented 1 year ago

我拿一个实际的场景举个例子 我有一个4通道数据 通道1:风向渲染 通道2:风速渲染 通道3:风向真值 通道4:风速真值 头两个通道只是渲染用,通道3和4用来运算取值用 另外一个例子: 通道代表时间维度 每个通道之间的时间间隔差10分钟

xmsuperman commented 1 year ago

我刚当下来代码简单测试了一下,1.6.2版本相对稳定,但还是有几个小问题请教一下作者 1、全球数据范围要求是-180至180度,如果是0至360度会加载不正确? 2、感觉全球的渲染比较卡,这个只能期望未来基于webgl渲染的版本?

hongfaqiu commented 1 year ago

不加班了不加班了,webgl版本已经写得差不多了,增加了很多功能,明天就可以更新了。 全球数据范围这个如果有特殊需求,可以通过传入transFunc自定义经纬度转换。