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文件路径