gpt4 book ai didi

python - shapefile 和 matplotlib : plot polygon collection of shapefile coordinates

转载 作者:太空狗 更新时间:2023-10-29 21:18:41 30 4
gpt4 key购买 nike

我正在尝试使用 python 中的 matplotlib 在世界地图上绘制国家/地区的填充多边形。

我有一个包含每个国家/地区边界坐标的 shapefile。现在,我想使用 matplotlib 将这些坐标(针对每个国家/地区)转换为多边形。不使用 basemap 。不幸的是,这些部分交叉或重叠。是否有解决方法,也许使用点到点的距离..或重新排序? enter image description here

最佳答案

哈!我发现,如何......我完全忽略了 sf.shapes[i].parts 信息!然后归结为:

#   -- import --
import shapefile
import matplotlib.pyplot as plt
import matplotlib.patches as patches
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
# -- input --
sf = shapefile.Reader("./shapefiles/world_countries_boundary_file_world_2002")
recs = sf.records()
shapes = sf.shapes()
Nshp = len(shapes)
cns = []
for nshp in xrange(Nshp):
cns.append(recs[nshp][1])
cns = array(cns)
cm = get_cmap('Dark2')
cccol = cm(1.*arange(Nshp)/Nshp)
# -- plot --
fig = plt.figure()
ax = fig.add_subplot(111)
for nshp in xrange(Nshp):
ptchs = []
pts = array(shapes[nshp].points)
prt = shapes[nshp].parts
par = list(prt) + [pts.shape[0]]
for pij in xrange(len(prt)):
ptchs.append(Polygon(pts[par[pij]:par[pij+1]]))
ax.add_collection(PatchCollection(ptchs,facecolor=cccol[nshp,:],edgecolor='k', linewidths=.1))
ax.set_xlim(-180,+180)
ax.set_ylim(-90,90)
fig.savefig('test.png')

然后它看起来像这样: enter image description here

关于python - shapefile 和 matplotlib : plot polygon collection of shapefile coordinates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15968762/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com