【发布时间】:2020-06-20 01:26:25
【问题描述】:
我想在地图上绘制区域的特征,但由于人口密度非常不均匀,较大的图块会误导性地吸引注意力。想想邮政编码的平均值(比如考试成绩)。
高分辨率地图可用于区分有人居住的地点,甚至其中的密度。下面的 Python 代码确实会根据每个像素的平均密度生成一个着色的栅格。
但是,我真正需要的是从同一区域的等值线地图(在本例中为匈牙利的邮政编码)着色,但着色只影响无论如何都会出现在栅格上的点。光栅只能确定像素的伽玛(或者可能是某些 3D 模拟中的高度)。有什么好的方法可以解决这个问题?
rasterio.mask.mask 不知何故?
(顺便说一句,带有邮政编码边界的叠加层也很好,但我对GeoViews如何工作有了更好的理解。)
import rasterio
import os
import datashader as ds
from datashader import transfer_functions as tf
import xarray as xr
from matplotlib.cm import viridis
# download a GeoTIFF from this location: https://data.humdata.org/dataset/hungary-high-resolution-population-density-maps-demographic-estimates
data_path = '~/Downloads/'
file_name = 'HUN_youth_15_24.tif' # young people
file_path = os.path.join(data_path, file_name)
src = rasterio.open(file_path)
da = xr.open_rasterio(file_path)
cvs = ds.Canvas(plot_width=5120, plot_height=2880)
img = tf.shade(cvs.raster(da,layer=1), cmap=viridis)
ds.utils.export_image(img, "map", export_path=data_path, fmt=".png")
【问题讨论】:
标签: python rasterio datashader geoviews