1. 查找地图的shp文件
在该工具中下载区域json文件
2. 将Json文件转为Shp文件
在该网站上传json文件,导出shp文件
3. 画地图
在Draw_Map/draw_map.py中
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import cartopy.crs as ccrs
from cartopy.io import shapereader
import cartopy.feature as cfeature
# 假设您已经有了中国的Shapefile路径
shp_path = r'./中华人民共和国/中华人民共和国.shp' # 请确保路径正确
# 新建图层和网格布局
fig = plt.figure(figsize=(12, 8))
gs = gridspec.GridSpec(2, 2, height_ratios=[3, 1], width_ratios=[2, 1])
# 绘制中国地图并添加经纬度网格线
ax = fig.add_subplot(gs[0, :], projection=ccrs.PlateCarree())
reader = shapereader.Reader(shp_path)
for record in reader.records():
ax.add_geometries([record.geometry], ccrs.PlateCarree(), facecolor='lightgray', edgecolor='black')
ax.set_extent([73, 135, 18, 55], crs=ccrs.PlateCarree())
# ax.add_feature(cfeature.COASTLINE)
# 为中国地图添加经纬度网格线
gl = ax.gridlines(draw_labels=True, dms=False, x_inline=False, y_inline=False)
gl.xlabels_top = False
gl.ylabels_right = False
# 绘制南海子图(不添加经纬度网格线)
sub_ax = fig.add_subplot(gs[1, 1], projection=ccrs.PlateCarree())
# 这里假设您有一个只包含南海的Shapefile,或者您从整个中国的Shapefile中筛选出了南海部分
# 由于我们没有这样的Shapefile,这里我们仍然使用整个中国的轮廓但只设置南海的视图范围
for record in reader.records():
sub_ax.add_geometries([record.geometry], ccrs.PlateCarree(), facecolor='none', edgecolor='black', linewidth=0.5)
sub_ax.set_extent([105, 125, 0, 25], crs=ccrs.PlateCarree())
# sub_ax.add_feature(cfeature.COASTLINE, linewidth=0.5)
# 注意:我们没有为sub_ax添加gridlines()
# 显示图形
plt.tight_layout() # 调整子图之间的间距
plt.show()