我想在地图上绘制区域的特征,但人口密度非常不均匀,较大的瓷砖会误导性地吸引注意力。想想邮政编码的平均值(比如考试成绩)。
高分辨率地图可用于区分有人居住的地区,甚至是其中的密度。下面的 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")