使用GDAL下载并转换SRTM的DEM数据(一)

        有时候需要用到DEM数据,常用的免费的DEM数据就是SRTM的DEM数据。

        SRTM数据主要是由美国太空总署(NASA)和国防部国家测绘局(NIMA)联合测量的,SRTM的全称是Shuttle Radar Topography Mission,即航天飞机雷达地形测绘使命,2000年2月11日上午11时44分,美国“奋进”号航天飞机在佛罗里达州卡那维拉尔角的航天发射中心发射升空,“奋进”号上搭载的SRTM系统共计进行了222小时23分钟的数据采集工作,获取北纬60度至南纬56度之间,面积超过1.19亿平方公里的9.8万亿字节的雷达影像数据,覆盖全球陆地表面的80%以上,该计划共耗资3.64亿美元,获取的雷达影像数据经过两年多的处理,制成了数字地形高程模型,该测量数据覆盖中国全境。
        SRTM数据每经纬度方格提供一个文件,精度有1 arc-second和3 arc-seconds两种,称作SRTM1和SRTM3,或者称作30M和90M数据,SRTM1的文件里面包含3601*3601个采样点的高度数据,SRTM3的文件里面包含1201*1201个采样点的高度数据。目前能够免费获取中国境内的RTM3文件,是90米的数据,每个90米的数据点是由9个30米的数据点算术平均得来的。

        目前可以找到的SRTM的DEM数据下在地址有下面几个,第一个,最原始的是http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp。将全球分为24×72的大小格网。如下图所示:


        然后在网页中选择要下载的区域,下载的格式有GeoTiff和ASCII两种格式,其中海洋部分没有高程数据,所以大部分是没有的。

        第二个,国际科学数据服务平台(中国的),地址为:http://datamirror.csdb.cn/admin/datademMain.jsp。里面提供了SRTM90米分辨率原始高程数据和ASTER GDEM30米分辨率数字高程数据产品两种DEM数据。先注册一个帐号,然后就可以下载了。

        第三个是位于加利福尼亚圣地亚哥大学的一个ftp,地址是ftp://topex.ucsd.edu/pub/srtm30_plus/。这里面的DEM也是SRTM的,不过该数据对于海洋部分进行了填充,即在原有的高程数据中加入了海洋海深度数据,数据值大于零的为海拔高,小于零的为海深。

        关于SRTM数据的介绍以及下载就到这里,下面我们下载的是第三个,从ftp下载数据后发现数据是一个以srtm为后缀的数据,研究发现该数据是一个二进制的裸数据,所以不能用ENVI,Erdas或则ArcGIS等软件直接打开使用,所以在这之前需要做一个格式转换,就是将二进制的裸数据转为常用的GeoTiff等之类的数据。感觉还是蛮麻烦的,有没有一种方式直接下载的同时就把格式转换好呢?

        通过之前写过一篇博客,使用GDAL下载网络数据的博客,地址为:http://blog.csdn.net/liminlu0314/article/details/7881285。既然GDAL可以获取网络数据,而且GDAL可以打开裸数据(这部分内容之前也写过一篇博客,地址为:http://blog.csdn.net/liminlu0314/article/details/7753377)。通过这两个知识,要是结合在一起,然后再用GDAL做一个格式转换,不就可以达到我们的目的了吗?

         首先从SRTM的ftp的元数据中可以知道,这个数据的大小是一个4800×6000的大小的单波段,有符号的16bit的整形数据。数据的投影就是标准的WGS84的经纬度坐标,分辨率大概是0.008333333333333度。图像左上角的坐标可以从文件名中得到,比如一个文件名为e020n40.Bathymetry.srtm,前四位e020表示东经20度,接下来的n40表示北纬40度,这样我们就可以知道这个数据的六参数就是:【20, 0.008333333333333, 0.0, 40, 0.0, -0.008333333333333】。

        有了上面的分析,我们就可以根据之前的如何使用GDAL打开裸数据http://blog.csdn.net/liminlu0314/article/details/7753377,来构造一个VRT的XML文本文件来使用GDAL转换srtm数据了。根据上面的知识,写出的VRT文件的内容如下:


    GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
    20, 0.008333333333333,  0.0,  40,  0.0, -0.008333333333333
    
        D:/SRTM/e020n40.Bathymetry.srtm
        0
        2
        9600
        MSB
    

        将上面的内容保存为一个后缀名为vrt的文本文件,然后用GDALOpen,之后使用CreateCopy函数就可以轻松的转为GeoTiff或者Img格式了。至此我们就解决了一半的问题,即转换文件格式的问题。还有一个问题就是在转换格式的同时自动从网络下载,(当然你也可以使用下载软件直接下载完再转格式)。

        通过之前的博客,我们知道GDAL已经继承了下载和访问网络数据的接口,那么我们直接把上面VRT文件中的srtm的路径换成网络路径试试,看看行不行。将【D:/SRTM/e020n40.Bathymetry.srtm】换成网络路径【ftp://topex.ucsd.edu/pub/srtm30_plus/srtm30/data/e020n40.Bathymetry.srtm】,测试发现直接换成网络路径会有问题,之后在GDAL的Maillist里面找到了答案,对于VRT文件,远程路径前面需要加一个前缀/vsicurl/,所以最终的路径就是【/vsicurl/ftp://topex.ucsd.edu/pub/srtm30_plus/srtm30/data/e020n40.Bathymetry.srtm】,这样最后的VRT文件内容就是:


    GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
    20, 0.008333333333333,  0.0,  40,  0.0, -0.008333333333333
    
        /vsicurl/ftp://topex.ucsd.edu/pub/srtm30_plus/srtm30/data/e020n40.Bathymetry.srtm
        0
        2
        9600
        MSB
    
        好了,到这里我们将这两个文件都解决了,一次性的下载网络SRTM数据并使用GDAL读取转换。这样的话还是挺麻烦的,毕竟一次只能处理一个,要是有个批处理工具就好了,这样的话,就可以自动批量下载数据了。要实现上面的功能就需要自己写点程序啥的来搞定了,明天有时间写个代码来实现上面的功能,最后贴个图给大家看看下载的数据到底长啥样。

使用GDAL下载并转换SRTM的DEM数据(一)_第1张图片



你可能感兴趣的:(GIS,RS,C++编程技术,GDAL,GDAL交流)