分幅输出影像瓦片
最近在做瓦片下载拼接的功能,但是如果将中国范围内的影像按照最高精度下载,拼接后的影像可能就太大了。假设0.5m分辨率,10km*10km的范围就是2w*2w像素。这个还是可以输出的,如果范围再大,50km*50km呢?就10w*10w像素了。用GDAL输出的Tiff格式上限是4G,Img无上限。但是太大总是很难搞。还是要分幅。将框选矩形范围内的的影像输出,同时保证输出图像的大小不至于太大,不超过2w*2w像素。
首先确定每一个分幅的大小假设为size=256*78≈20000。
基本算法流程:
1 int m = (int)((row2 - row1) / size); 2 int n = (int)((col2 - col1) / size); 3 //2000像素以拼接 4 for (int i = 0; i < m; i++) 5 { 6 for (int j = 0; j < n; j++) 7 { 8 计算左上角点行列号和坐标 9 写入size*size大小的影像 10 } 11 } 12 //右侧剩余 13 for (int i = 0; i <= row2 - row1 - m * size; i++) 14 { 15 for (int j = 0; j < n; j++) 16 { 17 计算左上角点行列号和坐标 18 写入(row2 - row1 - m * size)*size大小的影像 19 } 20 } 21 22 //底部剩余 23 for (int i = 0; i < m; i++) 24 { 25 for (int j = 0; j <= col2 - col1 - n * size; j++) 26 { 27 计算左上角点行列号和坐标 28 写入size*(col2 - col1 - n * size)大小的影像 29 } 30 } 31 //右下角剩余部分,特殊情况m=n=0,输出一个图幅 32 for (int ii = 0; ii <= row2 - row1 - m * size; ii++) 33 { 34 for (int jj = 0; jj <= col2 -col1 - n * size; jj++) 35 { 36 计算左上角点行列号和坐标
写入(row2 - row1 - m * size)*(col2 - col1 - n * size)大小的影像
37 }
38 }
作者:太一吾鱼水
文章未经说明均属原创,学习笔记可能有大段的引用,一般会注明参考文献。
欢迎大家留言交流,转载请注明出处。
分类:
测绘与地理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程