流域制图
- 从Gee获取WWF的hydrosheds。在需要的区域内打点,然后调整WWF的级别,从WWF筛选对应流域。
- 基于上一步的流域,对GRN进行筛选得到各级河网。
- 将河网和流域下载到本地,进行制图。
亚洲水塔
大图
目的是筛选亚洲中部高山区周围的辫状河段,并用遥感的手段研究这些辫状河段对气候变化的响应。现在想要做一个图,底图考虑用DEM,上覆水系图层,并将河段图层上覆于水系。不考虑行政区划的边界,因为与问题不相干。
- 水系数据集
var GRN=ee.FeatureCollection('projects/sat-io/open-datasets/GRN/as_river')
.filter(ee.Filter.eq('R_level', 1))
- 画个geometry用来筛选水系,GRN.filterBounds(geometry) 。
- 下载各级水系shp,用FeatureCollection的getDownloadURL方法。该水系数据集只有4个水系分级,分别下载四次。
- 下载DEM数据,同样用Image的getDownloadURL方法,scale设置为1000 m。
var elevation=ee.Image('NASA/NASADEM_HGT/001').select('elevation').clip(geometry)
- 把我画的河段的shp下载到本地
- 在gis中绘图,效果如下图所示,发现河段用shp表现出来很小,不好看。
- 考虑使用在gee内使用.map(function(f){return f.centroid(1000)})方法对河段要素集合的每一个河段要素计算其质心点,进而保持河段的点shp而不是面shp。在GIS中效果如下。
- 转换视图投影
- 结果
小图
用matplotlib的basemap模块from mpl_toolkits.basemap import Basemap
- 导入库
import pyris
from osgeo import gdal, gdal_array, osr
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.basemap import Basemap
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
- 想要显示亚洲水塔的范围,我这里大概用2500m以上来表示。
r'E:\Projects\Tower\GIS\tower_dem_1km.tiff'
是我从GEE上面下载的dem影像。
elevation = gdal_array.LoadFile( r'C:\Users\Administrator\Desktop\tower_dem_1km.tiff' )
pyris.show_npy(elevation>2500)
pyris.raster2shp( r'C:\Users\Administrator\Desktop\tower_dem_1km.tiff', r'E:\Projects\Tower\GIS\tower_dem_1km.shp', binaryzation=2500)
- 绘图
fig = plt.figure()
ax = fig.add_subplot(111)
map = Basemap(projection='ortho',lat_0=33,lon_0=90.5,resolution='l',\
# llcrnrlon=66,llcrnrlat=18,urcrnrlon=113,urcrnrlat=45
)
map.drawcoastlines(linewidth=0.5)
map.readshapefile( r'E:\Projects\Tower\GIS\tower_dem_1km', 'tower', drawbounds=False )
patches = []
for info, shape in zip(map.tower_info, map.tower):
# if info['FID'] == 'Selva':
patches.append( Polygon(np.array(shape), True ) )
ax.add_collection(PatchCollection(patches, facecolor= 'm', edgecolor='k', linewidths=0.8, zorder=2, alpha=0.6))
map.etopo( scale=0.5, alpha=0.8 )# terrain
plt.savefig('tower.png',dpi=500,facecolor='w',edgecolor='w',orientation='portrait',format=None,transparent=False,bbox_inches=None,pad_inches=0.1,metadata=None)
plt.show()
- 效果