首页 > 其他 > 详细

osgearth 代码 hack(二) 地形制作

时间:2020-05-04 23:48:35      阅读:93      评论:0      收藏:0      [点我收藏+]

今天忙乎一整天, 终于把离线高程搞定, 记录如下:

 

首先, 很自然想到用大名鼎鼎的gdal2tiles工具。然鹅, 很不幸, 以前都是用它切RGB影像,  今天用16bit的高程图像试验了一下,发现完全不对,图像出来像是打满了补丁。

网上收了一圈。  最后确认gdal2tiles的确只支持8bit depth 图像。  自己动手丰衣足食, 准备改代码。

然后,撸代码过程中  发现问题在于  创建的 MEM driver  用默认的8bit  格式  , 导致了16bit 图像写入错误。   总体流程:先打开图像---》warp操作(就是重投影,这里有个问题后面再说)

---》将重投影的图像存为 vrt 文件(放在系统的APPDATA目录下)---》开始制作最高清一层的瓦片(16bit信息在这里丢失)---》从清晰层到模糊层(忘记0代表哪层,这样表述更清楚)建立

overview .

知道问题所在,就是动手改吧。 找到创建MEM driver 的地方, 把Create 函数最后的位置上添加一个dtype 类型,  这个是从原始输入文件得到的,代码大约如此:

inputSrc->GetRasterBand(1)->DataType;

 

另外一个问题, 默认情况下,生成的瓦片文件是PNG 格式, 做高程文件,还是改成tif.   这个很容易改  找到 PNT  分别改Driver (GTiff) 类型和 ext 。   

经过一天的努力, 总算搞定了 。贴两张图看看。

技术分享图片

这个代码我放在github 上。   http://github.com/enigma19971/tilemap

不过还是有一些问题:  不是所有分支路径都改了, 因为项目上要用, 能工作就行了。 querySize != tileSize 的分支路径没管。 另外一个很奇怪的问题是 , 当选择

profile 为 mercator 的时候,  常常发现 warp 出来的结果是一个 y 值为0 的dataset .   不知道是否有人解决了这个问题,  希望能跟高人讨论一下。 

技术分享图片

osgearth 代码 hack(二) 地形制作

原文:https://www.cnblogs.com/enigma19971/p/12828544.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!