使用Python绘制网格化地图并实现降雨数据分配与存储
新加坡网格化降雨地图实现方案(Python)
完全可以用Python实现你提出的所有需求,以下是具体的实现思路和工具推荐:
1. 生成指定分辨率的新加坡网格地图
- 先确定新加坡的地理范围:可以用
geopandas加载新加坡官方的行政区划数据(比如SHP文件),或者直接用大致经纬度范围(北纬1.1°至1.4°,东经103.6°至104.0°) - 坐标转换是关键:因为要按米为单位划分网格,建议把WGS84(经纬度)转换为新加坡本地投影坐标系SVY21(EPSG:3414),这个坐标系以米为单位,直接计算网格间隔更方便,用
pyproj就能完成转换 - 生成网格:用
numpy计算网格的行列数,再生成每个网格的中心点或多边形,最后存为geopandas.GeoDataFrame格式,方便后续处理
2. 最近邻插值分配降雨数据并可视化
- 预处理降雨站数据:确保降雨站的坐标和网格用同一投影坐标系,同时整理好每日降雨的时间序列数据
- 最近邻查询:用
scipy.spatial.cKDTree把所有降雨站的坐标建成KD树,然后对每个网格中心点快速找到最近的降雨站,把对应的降雨值赋值给网格 - 颜色编码:用
matplotlib或plotly给网格上色,比如用viridis色系根据降雨值从低到高渐变,就能生成类似示例图的可视化效果
3. 存储每日网格化数据到数组
- 先算好总天数:1980年1月1日到2021年12月31日一共15340天左右
- 初始化多维数组:用
numpy创建一个形状为(总天数, 网格行数, 网格列数)的数组,用来存储每日的网格降雨值 - 循环处理每日数据:对每一天的降雨数据执行最近邻插值,把结果填充到数组对应位置,最后用
numpy.savez或者h5py存成二进制文件,既节省空间又方便后续读取
必备Python库
geopandas:处理地理数据、生成网格pyproj:坐标系统转换scipy:KD树实现高效最近邻查询numpy:数组存储和数值计算pandas:处理时间序列降雨数据matplotlib/plotly:可视化颜色编码
示例效果参考
内容的提问来源于stack exchange,提问作者Saqif
相关产品推荐
相关产品推荐

