使用shp文件画地图

1. 查找地图的shp文件 

DataV.GeoAtlas地理小工具系列

在该工具中下载区域json文件

2. 将Json文件转为Shp文件

mapshaper

在该网站上传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()

4. 参考文章

http://t.csdnimg.cn/HXKq0

http://t.csdnimg.cn/xDsFI

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值