乐于分享
好东西不私藏

教程//用python批量下载全球精细DEM数据

教程//用python批量下载全球精细DEM数据

Copernicus DEM 官网是

https://spacedata.copernicus.eu/collections/copernicus-digital-elevation-model

博主GIS荟曾详细介绍过Copernicus DEM数据。

Copernicus 是欧洲空间局(European Space Agency, ESA)和欧盟共同合作的一个项目,旨在提供地球表面的监测和地表特征信息。也提供了全球范围内30米和90米两种大小的数据,但是不包括海洋和部分陆地区域。
你个海怪,公众号:GIS荟请不要再购买12.5米的DEM了,这个免费的吊打它(Copernicus 哥白尼)

文章介绍了这种DEM数据下载方法,并提供了百度网盘下载链接。

本文提供一种批量下载全球哥白尼DEM方法。

(1)下载哥白尼DEM的vrt文件。

https://github.com/MarcYin/Copernicus_GLO_30_DEM_VRT

(2)本机安装gdal环境,安装环境办法请自行解决。环境安装好了,打开cmd命令框。

运行:

gdalinfo /vsicurl/https://raw.githubusercontent.com/MarcYin/Copernicus_GLO_30_DEM_VRT/main/copernicus_GLO_30_dem.vrt

cmd里面运行效果是这样子

Linux系统运行跟这个类似。

gdalinfo成功运行的界面是这样。

从这个界面可以找到单幅DEM的存储地址,比如

https://copernicus-dem-90m.s3.amazonaws.com/Copernicus_DSM_COG_30_N41_00_E043_00_DEM/Copernicus_DSM_COG_30_N41_00_E043_00_DEM.tif

这些DEM数据存放在亚马逊云里,而这个地址在浏览器里面是可以访问并下载的。

按照这个思路把gdalinfo 命令调整下,将命令运行结果输出到一个文本文件里面。比如:

gdalinfo /vsicurl/https://raw.githubusercontent.com/MarcYin/Copernicus_GLO_30_DEM_VRT/main/copernicus_GLO_30_dem.vrt > E:\copernicus__dem_list.csv 

打开文件后,是这样:

Driver: VRT/Virtual RasterFiles: /vsicurl/https://raw.githubusercontent.com/MarcYin/Copernicus_GLO_30_DEM_VRT/main/copernicus_GLO_30_dem.vrt       /vsicurl/https://copernicus-dem-30m.s3.amazonaws.com/Copernicus_DSM_COG_10_N00_00_E006_00_DEM/Copernicus_DSM_COG_10_N00_00_E006_00_DEM.tif       /vsicurl/https://copernicus-dem-30m.s3.amazonaws.com/Copernicus_DSM_COG_10_N00_00_E009_00_DEM/Copernicus_DSM_COG_10_N00_00_E009_00_DEM.tif       /vsicurl/https://copernicus-dem-30m.s3.amazonaws.com/Copernicus_DSM_COG_10_N00_00_E010_00_DEM/Copernicus_DSM_COG_10_N00_00_E010_00_DEM.tif       /vsicurl/https://copernicus-dem-30m.s3.amazonaws.com/Copernicus_DSM_COG_10_N00_00_E011_00_DEM/Copernicus_DSM_COG_10_N00_00_E011_00_DEM.tif       /vsicurl/https://copernicus-dem-30m.s3.amazonaws.com/Copernicus_DSM_COG_10_N00_00_E012_00_DEM/Copernicus_DSM_COG_10_N00_00_E012_00_DEM.tif

有了这个文件,就可以利用python批量下载了。

完整下载代码是:

import wgetimport tempfileimport sysimport os,globdownload_path = r'E:\download'if not os.path.exists(download_path):    os.makedirs(download_path)download_vrt = r'E:\copernicus__dem_list.csv'urls = open(download_vrt).readlines()urls = [ u for u in urls if u.find('vsicurl') != -1]n_files = len(urls)for i,url in enumerate(urls):    url = url.strip().replace('/vsicurl/','')    print('\n---',i,'--of--',n_files,url)    if url.find('\n') != -1:        url = url[:url.find('\n')]    try:        file_name = wget.filename_from_url(url)    except:        continue    target_name = os.path.join(download_path,file_name)    try:        file_name = wget.download(url, out=target_name)    except:        if os.path.exists(processing_file):            os.remove(processing_file)                continue    if os.path.exists(processing_file):        os.remove(processing_file)   sys.exit(1)