基于sharpMap 叠加独立坐标的矢量栅格数据并 转换为tif图像输出

一、目的:

1.1)利用sharpMap 展示独立坐标的栅格、矢量图层。
1.2)将两个叠加的图层输出成tif (或其他栅格图像)。

二、步骤:

2.1)准备数据 :①栅格底图tif 和其坐标文件信息 .tfw , tfw相关信息可以查看
https://blog.csdn.net/u014136513/article/details/50580619
② shp格式的矢量数据。

2.2) 加载两种图层,该步骤较为简单,详情可以查看sharpMap案例:
基于sharpMap 叠加独立坐标的矢量栅格数据并 转换为tif图像输出_第1张图片

2.3) 利用mapBox.Image.save() 的方法可以保存当前mapBox中的图片,但是清晰度不高,因为分辨率与其MapBox的大小有关,故采用固定的MapBox的大小进行切割,然后再把图像进行合并。

2.4) 主要思路在于:设置mapBox的宽度与高度都为400,如果调用mapBox.Image.save()方法,其生成的图片分辨率也为400*400,于是决定利用400*400进行裁剪。
基于sharpMap 叠加独立坐标的矢量栅格数据并 转换为tif图像输出_第2张图片

2.5) 利用mapBox1的MapRefreshed方法进行递归。先从左上角开始,此时需要利用到tfw文件中的数据,取其X方向上的象素分辨率与Y方向上的象素分辨率,构造400*400外包矩形所覆盖的地理范围,关键代码:

             public Envelope getEnvelope()
        {
          // 左边地理坐标+像素值 * X分辨率 = 右边地理坐标 
            var X = LEFT + PIXEL * X_SCARE;
            var Y = TOP + PIXEL * Y_SCARE;
            var envelope = new Envelope(LEFT, X, TOP, Y); //**地理**范围
            LEFT = X;
            if (X > ENVELOPE.Right()) //换行
            {

                if (Y < ENVELOPE.Bottom()) //全切割完了
                {
                    BREAK_FLAG = true;
                }else
                {
                    TOP = Y;
                    LEFT = ENVELOPE.Left(); //重新从左边开始
                    ROW++;
                    NEW_FOLDER_FLAG = true; //创建下个文件夹
                }
            }
            RANK++;//保存图片后重置到左边
            return  envelope;
        }

2.6)递归切割完所有的图片,例如我的原图分辨率为2008*3407,根据400*400的大小,构成了9行6列的图片二维数组。然后再进行图像的拼接,此步骤搜一下如何合并图像即可,其中注意①save图像中的mapBox.Image对象在其他地方引用,应注意使用Lock 与 委托。②应使用高质量的save图像。
基于sharpMap 叠加独立坐标的矢量栅格数据并 转换为tif图像输出_第3张图片
合并后,原图为2008*3407,生成的图为2400*3600,可以将空白区域删除,也可以直接加载,毕竟读取文件时候根据tfw文件,其X、Y分辨率没有发生变化。

案例下载:
https://download.csdn.net/download/a748448660/10575167

你可能感兴趣的:(GIS)