• 分幅输出影像瓦片


      最近在做瓦片下载拼接的功能,但是如果将中国范围内的影像按照最高精度下载,拼接后的影像可能就太大了。假设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 }

  • 相关阅读:
    Android 编辑框(EditText)属性学习
    读书笔记 -《高效程序猿的45个习惯-敏捷开发修炼之道》
    Launcher3实现壁纸居中
    Trie树的常见应用大总结(面试+附代码实现)
    LeetCode Summary Ranges
    abap选择屏幕上的button
    SQLite Expert表分离和解决SQLite Expert删除表后大小不变的问题
    git push 失败
    动态限制EdiText仅仅能输入特定字符
    DateTime类常用技巧摘录
  • 原文地址:https://www.cnblogs.com/yhlx125/p/4094516.html
Copyright © 2020-2023  润新知