需求:编辑部经常要求,要提供底图来源,在论文中注明 “文中涉及的地图是基于中华人民共和国自然资源部地图技术审查中心标准地图服务系统下载的审图号为XXXX的中国地图(世界地图)制作,底图无修改”。
这篇文章分享下如何最快得到带有审图号的shp文件,并叠加雷达回波。
具体步骤:



这里可以看到,地图文件是有审图号的,选择好你所需的地区,和需要的层级(省、市、县)。这里只能下载GeoJSON格式文件,举例下载湖南省各市的GeoJSON格式文件。

跳转后点击按钮【select】,选择刚下载好的GeoJSON格式文件。




注意:PPI模块中参数add_shps=False 是指关闭cinrad自带底图,如果要保留,则设置为True
#导入相关库
from cinrad.io import StandardData
from cinrad.visualize import PPI
#读取基数据文件
f=StandardData("D:/Z_RADR_I_Z9731_20210510070930_O_DOR_SAD_CAP_FMT.BIN.bz2")
data=f.get_data(2,230,'REF')
#开始画图,绘制白色底图。
#add_shps=False表示关闭PPI自带的地图底图,完全用自己的shp文件来绘制底图。
fig = PPI(
data,
dpi=300,
add_city_names=True,#显示市县名称
plot_labels=True,
extent=[109, 116, 25, 31],
style='white',
add_shps=False #关闭cinrad底图
)
#叠加自己的shp文件
border_file=r'D:/审图号:GS(2024)0650号/湖南省_市.shp'
fig.add_custom_shp(border_file, encoding="gbk", color="red",linewidth=1)
效果图:

注意:plot_ppi_map模块中设置embellish=False关闭Py-ART自带的底图,如果不用关闭,则设置为True。设置自己的shp文件路径shapefile=XXX.shp'
#导入所需的库
import pyart
from cinrad.io import StandardData
from cinrad.visualize import PPI
from cinrad.io.export import standard_data_to_pyart
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import matplotlib as mpl
#读取数据
f=StandardData("D:/Z_RADR_I_Z9731_20210510070930_O_DOR_SAD_CAP_FMT.BIN.bz2")
#转换成pyart格式
radar=standard_data_to_pyart(f)
#采用pyart.graph.RadarMapDisplay模块生成显示对象
display=pyart.graph.RadarMapDisplay(radar)
#在地图上绘制雷达回波图像
fig=plt.figure(figsize=(12,8),dpi=600)
#投影设置为等经纬度投影
ax=fig.add_subplot(111,projection=ccrs.PlateCarree())
#选择绘制1.5°仰角(序号2)的水平反射率因子PPI图像,画上指定纬度的网格线,采用自己的底图时需要设置embellish=False,然后设置shp文件路径shapefile='C:/审图号:GS(2024)0650号/湖南省_市.shp'
display.plot_ppi_map('reflectivity',2,ax=ax,
title='',
vmin=-5,vmax=75,
lat_lines=[25,27,29,31],
lon_lines=[110,112,114,116],
resolution='10m',
embellish=False,
colorbar_label='反射率因子/dBZ',
projection=ccrs.PlateCarree(),
shapefile='C:/审图号:GS(2024)0650号/湖南省_市.shp',
shapefile_kwargs={
'facecolor': 'none',
'edgecolor': 'gray',
'linewidth': 0.5
},)
plt.show()
效果图:

#导入所需的库
from pycwr.draw import plot_ppi_map
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import geopandas as gpd
from pycwr.io import read_auto
#读取雷达基数据文件,并显示雷达数据结构
file= r"D:/Z_RADR_I_Z9731_20210510070930_O_DOR_SAD_CAP_FMT.BIN.bz2"
radar = read_auto(file)
#绘制地图
# show=False 因为不能让马上弹窗,否则后面的 shp 画不上去
plot_ppi_map(radar, field="dBZ", sweep=0, show=False)
# 获取刚才被 plot_ppi_map 自动创建的当前坐标轴
ax = plt.gca()
# 读取shp数据
gdf = gpd.read_file('D:/审图号:GS(2024)0650号/湖南省_市.shp')
# 绘制shp
ax.add_geometries(gdf.geometry, crs=ccrs.PlateCarree(),
facecolor='none', edgecolor='red', linewidth=1.5)
plt.show()
效果图:

是的,再强调一下:
PyCINRAD和PyART两者既可以在原底图上叠加自己的shp,也可以完全关闭原底图,只显示自己的shp作为底图。但我没有找到PyCWR能关闭自带的地图底图的方法,只能作叠加。
END
声明:欢迎转载、转发。气象学家公众号转载信息旨在传播交流,其内容由作者负责,不代表本号观点。文中部分图片来源于网络,如涉及内容、版权和其他问题,请联系小编处理。