zoukankan      html  css  js  c++  java
  • 使用阿富汗和巴基斯坦地区的SRTM数据生成山体阴影和彩色地形图

    使用阿富汗和巴基斯坦地区的SRTM数据生成山体阴影和彩色地形图

    数据来自GIST,工具来自GDAL

    原文地址:http://developmentseed.org/blog/2009/jul/30/using-open-source-tools-make-elevation-maps-afghanistan-and-pakistan/

    在阿富汗和巴基斯坦这样多山的地方,高程数据是非常重要的。GIST项目是使用航天飞机雷达地形测绘任务(STRM)获取各个国家的高程数据,并存储为GeoTIFF格式。

    但是使用栅格数据处理和使用矢量数据(比如shp文件)处理是两种完全不同的处理流程。幸运的是,开源的GDAL项目提供了非常好的工具来处理这些文件。

    一个叫gdaldem新工具,可以使用高程数据生成山体阴影数据以及彩色地形图。山体阴影使用原始的高程数据生成高山或者丘陵在某一侧的影子;而彩色地形图是把高程数据中不同的高度用不同的颜色来进行渲染。这两个工具结合起来产生的图像效果非常惊人。(点击下面的图可以查看大图)

    图1 山体阴影图

    图2 彩色地形图

    图3 上面两个图像组合的图像

      下面的步骤就是讲怎么生成上面的图像的一个教程。来自DM Solutions Group。

    1、安装GDAL。在写这篇文章的时候,这个gdaldem还在开发库中,所以你可以从svn获取或者使用一个nightly snapshot的版本来使用。(译者注:这篇文章写于2009年7月30日,当时gdaldem还没更新到稳定版本)。

    2、我的原始dem数据一共有9个GeoTiff文件(阿富汗有4个,巴基斯坦有5个)。首先我使用gdal_merge.py把这9个文件合并为一个1.4G的文件(译者注:现在也可以gdalbuildvrt工具来完成这个功能了,如果你觉得python脚本不方便的话)。

    gdal_merge.py的命令行为:

    $ gdal_merge.py-O afpak_merged.tif .. / afghanistan_srtm_ /afghanistan_srtm_.tif .. / pakistan_srtm_ / pakistan_srtm_.tif 

    gdalbuildvr.exe的命令行为(译者注:这点是我自己加的,这个tif.txt就是把要合并的9个tif的路径写进去,一行一个路径):

    $ gdalbuildvr -input_file_list DEM\tif.txt afpak_merged.vrt 

    3、生成山体阴影数据(译者注:-s 111120就是图像分辨率和高程之间的换算关系,因为SRTM的数据分辨率一般是90米的,而且是按照WGS84经纬度的坐标系下,所以需要用这个转换系数进行转换一下)

    $ gdaldem hillshade afpak_merged.tif hillshade_afpak.tif -z 5 -s 111120

    4、创建彩色地形图。在这里之前你先要创建一个配置文件,就是说明用什么颜色来表示高程多少,下面是我使用的一个颜色列表:

    3500255 255 255
    2500235 220 175
    1500190 185 135
    700240 250 150
    050 180 50
    -32768200 230 255

    下面是命令行:

    $gdaldem color-relief afpak_merged.tif ramp.txt color_relief_afpak.tif

    最后,我们希望图像的投影是Google投影。我试图使用合并后的图像进行投影转换,但是结果是错的,所以只好先把每个数据先进行投影转换,然后在合并。投影转换的命令行如下:

    $gdalwarp -s_srs EPSG:4326 -t_srs EPSG:900913 color_relief_afpak.tifcolor_relief_afpak_goog.tif
    $gdalwarp -s_srs EPSG:4326 -t_srs EPSG:900913 color_relief_afpak.tifcolor_relief_afpak_goog.tif

    最后输出的结果是两个比较大的tif文件。把这两个文件用QGIS打开,然后把山体阴影数据放到上面,将其透明度设置为70%,然后效果看起来非常好。

    对于这一点,我们使用的tile rendering infrastructure(译者注:这个tile renderinginfrastructure可以参考这里http://developmentseed.org/blog/2009/jul/01/generating-custom-map-tiles-rapidly-cloud/)软件不支持栅格数据。因为我们中心使用的是PostgreSQL数据库作为唯一的数据源,而PostgreSQL数据库只能存储矢量数据,所以我们现在使用S3来存储栅格数据。当需要的时候,这些数据自动下载到计算节点进行渲染。

  • 相关阅读:
    php数组到json的转变
    微信小程序获取微信绑定的手机号
    微信小程序授权登录
    用海豚框架(DolphinPHP)实现单/多图片上传时,如何获得图片路径
    数据库索引-简单了解
    php将二维数组转换成我想要的一维数组
    php的八大数据类型
    单例模式
    Springboot配置Sqlserver
    WinForm 文件操作
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6313984.html
Copyright © 2011-2022 走看看