大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全家桶1年46,售后保障稳定
数字高程模型(Digital Elevation Model),简称DEM
网上有很多中国DEM的下载链接,要么收费,要么地图不对(缺藏南、湾湾等等),要么版本太老
所以自己做了一个,流程如下:
第一步:NASA官网下载STRM 90m文件包(http://srtm.csi.cgiar.org)
(i) 第二张图的Tile size就是在选区域下载,所以也可以选5x5degree,但就要选很多区域,而且下载的时候要一个个点,太麻烦了,30x30degree的话,只需要选六块就能包住中国;
(ii) 下载速度可能有点儿慢,值得等待;
第二步:将六块地图拼接
(i) 一张一张读到ArcGIS中(上图之所以看着怪是因为每个子图的colorbar还没统一),可能会卡,别着急
(ii) 像素类型选16_BIT_SIGNED (因为原始图像的类型就是16位有符号整型,保持一致;可以通过属性查看原图像的像素类型)为arcgis中DEM图进行拼接时像素类型怎么填?
(iii)波段选1(因为不是真彩色,全部合到一幅上); 在ArcGIS下如何合并dem?
这时候咱们的DEM图还是栅格数据集,需要转换成tif格式才能进行掩模裁剪
第三步:转换格式 栅格数据集→TIF
网上有很多DEM合并办法(镶嵌)和裁减办法,但是我发现用镶嵌办法得到的是栅格数据集而不是TIF文件,如果用栅格数据集去裁减,那么就必须保存在默认路径(Default.gdb)里,否则图像就怪怪的完全不对(丢失空间参考信息 解决ArcGIS栅格数据空间参考丢失问题) 但这样的话,我又没办法导出,就很鸡肋,所以就要转成TIF来裁减
第四步:根据边界线掩模裁剪出DEM
如果你的待裁剪图像文件没有空间参考信息丢失的问题,那就可以直接掩模裁剪,请看:
只有边界线的情况下如何在Arcgis上截取目标区域(掩膜裁剪)
如果你的待裁剪图像文件有空间参考信息丢失的问题,要注意:
掩模裁剪,因为空间信息的丢失,裁出来的图会怪怪的也不对,调试了很久,最后发现用代码反而能裁出来,代码很简单如下(也是自己写的,改四个路径就行,如果需要批量裁减,可以看用Python对ASCII文件进行批量掩模裁剪):
# -*- coding: utf-8 -*-
#此代码是用以掩模裁剪,从全球DEM中裁剪出中国区
import arcpy
arcpy.CheckOutExtension("spatial")
arcpy.gp.overwriteOutput=1
arcpy.env.workspace = "F:\\DEM_SRTM\\China_include_tif" #工作空间
raster = "F:\\DEM_SRTM\\China_include_tif\\china_include.tif" #需要裁减的图像
mask= "F:\\DEM_SRTM\\China_include_tif\\China_boundary.shp" #掩膜文件
out= "F:\\DEM_SRTM\\China_include_tif\\china_only.tif" #输出文件
arcpy.gp.ExtractByMask_sa(raster, mask, out)
print("All done")
这样就能成功裁减了,结果图如下:
(西北有负值,这是图像原本就有的,估计是因为盆地,具体原因还需要继续探索)
一直以来觉得中国的数据共享和分发做的不好,要么收费,要么不对,要么陈旧,所以在这儿也把我自己裁出来的中国区DEM分享出来,大家下载后也可以检查检查,有问题随时联系我~
链接:https://pan.baidu.com/s/1d8ad36FPHTO9CVU9r9DXGw
提取码:bdak
中国边界shp(包含九段线)文件下载链接:(感谢这位博主!)
[资料] 南海诸岛及九段线shp
Finish!
后记:
写博客的初衷是分享经验,同时是算是自己对思路和代码的整理,方便日后处理数据,应该可以帮到很多人。
我已免费分享我的心得,如果看官还有其他问题的,那么:知识付费,我的时间和经验正好可以解决你的问题。
咨询问题请添加QQ:819369354
2022年4月20日
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/201099.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...