利用shp文件进行绘图白化

1. 获取shp文件

全国地图的shp文件_中国地图shp文件官方-CSDN博客文章浏览阅读2.3w次,点赞48次,收藏192次。一、下载地图的json文件推荐网址http://datav.aliyun.com/tools/atlas/index.html在选择某省的地图时,将鼠标移至该省后进入在右上方,包含子区域选项,打钩能显示市界(最精确的能到县界)在右侧点下载符号能得到地图的json文件二、在线将json文件转化成shp文件推荐网址https://mapshaper.org/将json文件拖入该处在右上角选择export,就能输出地图的shp文件..._中国地图shp文件官方https://blog.csdn.net/hq19940416/article/details/119808424?spm=1001.2014.3001.5501由于有不同的方式获取shp文件,同时地图的shp内容格式存在不同,本博客中的程序基于该方式下载的shp文件进行绘图。

2. 读取shp文件

上述方法下载的shp文件,通过程序读取能看到其格式如下

import shapefile as shp
from shapefile import Reader

shpfile = "./中华人民共和国.shp"
sf = shp.Reader(shpfile,encoding='utf-8')
for shape_rec in sf.shapeRecords():
    print(shape_rec.record)

得到的结果

Record #0: [110000, '北京市', None, None, 16, 'province', None, 0, None, '']
Record #1: [120000, '天津市', None, None, 16, 'province', None, 1, None, '']
Record #2: [130000, '河北省', None, None, 11, 'province', None, 2, None, '']
Record #3: [140000, '山西省', None, None, 11, 'province', None, 3, None, '']
Record #4: [150000, '内蒙古自治区', None, None, 12, 'province', None, 4, None, '']
Record #5: [210000, '辽宁省', None, None, 14, 'province', None, 5, None, '']
Record #6: [220000, '吉林省', None, None, 9, 'province', None, 6, None, '']
Record #7: [230000, '黑龙江省', None, None, 13, 'province', None, 7, None, '']
Record #8: [310000, '上海市', None, None, 16, 'province', None, 8, None, '']
Record #9: [320000, '江苏省', None, None, 13, 'province', None, 9, None, '']
Record #10: [330000, '浙江省', None, None, 11, 'province', None, 10, None, '']
Record #11: [340000, '安徽省', None, None, 16, 'province', None, 11, None, '']
Record #12: [350000, '福建省', None, None, 9, 'province', None, 12, None, '']
Record #13: [360000, '江西省', None, None, 11, 'province', None, 13, None, '']
Record #14: [370000, '山东省', None, None, 16, 'province', None, 14, None, '']
Record #15: [410000, '河南省', None, None, 18, 'province', None, 15, None, '']
Record #16: [420000, '湖北省', None, None, 17, 'province', None, 16, None, '']
Record #17: [430000, '湖南省', None, None, 14, 'province', None, 17, None, '']
Record #18: [440000, '广东省', None, None, 21, 'province', None, 18, None, '']
Record #19: [450000, '广西壮族自治区', None, None, 14, 'province', None, 19, None, '']
Record #20: [460000, '海南省', None, None, 19, 'province', None, 20, None, '']
Record #21: [500000, '重庆市', None, None, 38, 'province', None, 21, None, '']
Record #22: [510000, '四川省', None, None, 21, 'province', None, 22, None, '']
Record #23: [520000, '贵州省', None, None, 9, 'province', None, 23, None, '']
Record #24: [530000, '云南省', None, None, 16, 'province', None, 24, None, '']
Record #25: [540000, '西藏自治区', None, None, 7, 'province', None, 25, None, '']
Record #26: [610000, '陕西省', None, None, 10, 'province', None, 26, None, '']
Record #27: [620000, '甘肃省', None, None, 14, 'province', None, 27, None, '']
Record #28: [630000, '青海省', None, None, 8, 'province', None, 28, None, '']
Record #29: [640000, '宁夏回族自治区', None, None, 5, 'province', None, 29, None, '']
Record #30: [650000, '新疆维吾尔自治区', None, None, 24, 'province', None, 30, None, '']
Record #31: [710000, '台湾省', None, None, 0, 'province', None, 31, None, '']
Record #32: [810000, '香港特别行政区', None, None, 18, 'province', None, 32, None, '']
Record #33: [820000, '澳门特别行政区', None, None, 8, 'province', None, 33, None, '']
Record #34: [None, '', None, None, None, '', None, None, None, 'JD']

3. 根据读取结果修改maskout.py

...
def shp2clip(originfig,ax,shpfile,region = '江西省'):
    sf = shp.Reader(shpfile,encoding='utf-8')
    for shape_rec in sf.shapeRecords():
        if shape_rec.record[1] == region:  ####这里需要找到和region匹配的唯一标识符,record[]中必有一项是对应的。
            vertices = []
            codes = []
            pts = shape_rec.shape.points
            prt = list(shape_rec.shape.parts) + [len(pts)]
            for i in range(len(prt) - 1):
                for j in range(prt[i], prt[i+1]):
                    vertices.append((pts[j][0], pts[j][1]))
                codes += [Path.MOVETO]
                codes += [Path.LINETO] * (prt[i+1] - prt[i] -2)
                codes += [Path.CLOSEPOLY]
            clip = Path(vertices, codes)
            clip = PathPatch(clip, transform=ax.transData)
...

主要修改位置:

(1)region = "江西省"

(2)if shape_rec.record[1] == region

4.绘图

import maskout

cf = ax.contourf(lon, lat, ele, lim, cmap='RdYlGn_r')
maskout.shp2clip(cf, ax, shp_path)

其中 cf 是填色图,shp_path为shp文件路径

5.效果图

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值