首页 文章

在底图上绘制填充的多边形会引发__getitem__错误

提问于
浏览
1

我正在努力学习在基础Python映射库中使用地理空间数据,这是我第一次使用Shapely / Polygons / Basemap /等 .

我有一组描述给定区域中的邻域的多边形 . 如果我只是想明白地绘制它们,下面的函数可以解决这个问题(mymap只是一个Basemap对象,hood_map是一个邻域及其相关多边形的集合):

def drawNeighborhoods(mymap,hood_map):
    for hood in hood_map.neighborhoods:
        lon,lat = hood.polygon.exterior.coords.xy
        x,y = mymap(lon,lat)
        mymap.plot(x,y,'-k',color='lightgrey')

这很好用,我在 Map 上得到每个街区的轮廓 . 但是,我现在想根据我对每个街区的外部数据来遮蔽街区(例如,如果没有比萨店,则为白色,如果有100个比萨饼,则为红色等) . 为此,我创建了一个colormap,colorbar等 .

cmap = cm.get_cmap('Reds')
norm = Normalize(vmin=0, vmax=max(number_of_pizza_joints))
cb = ColorbarBase(ax, cmap=cmap, norm=norm)

然后我这样做(根据这个例子https://gist.github.com/urschrei/6436526):

def drawNeighborhoods(mymap,hood_map):
    patches = []
    for hood in hood_map.neighborhoods:
        color = cmap(norm(hood.number_of_pizza_joints))
        lon,lat = hood.polygon.exterior.coords.xy
        x,y = mymap(lon,lat)
        poly = Polygon(zip(x,y))
        patches.append(PolygonPatch(poly,fc=color, ec='#555555', alpha=0.5, zorder=4))
    ax.add_collection(PatchCollection(patches, match_original=True))

在这里,我得到一个错误:

Traceback (most recent call last):
  File "colorHoodsByPizza.py", line 103, in <module>
    drawNeighborhoods(mymap,hood_map)
  File "colorHoodsByPizza.py", line 52, in drawNeighborhoods
    patches.append(PolygonPatch(poly,fc='#cc00cc', ec='#555555', alpha=0.5, zorder=4))
  File "/Users/zach/anaconda2/lib/python2.7/site-packages/descartes/patch.py", line 87, in PolygonPatch
    return PathPatch(PolygonPath(polygon), **kwargs)
  File "/Users/zach/anaconda2/lib/python2.7/site-packages/descartes/patch.py", line 53, in PolygonPath
    ptype = polygon["type"]
TypeError: 'Polygon' object has no attribute '__getitem__'

我的猜测是 getitem 错误可能是因为多边形["type"]没有混淆为什么会出现这个错误 . 我做了一些愚蠢的事情 . 任何见解?

1 回答

  • 1

    为了记录,我经过多次试错后解决了这个问题 . 事实证明,进口订单很重要 . 在这种情况下,我通过另一个导入导入Shapely(导入A;在A.py内部导入形状) . 无论出于何种原因,笛卡尔都无法与导入的导入进行交互 . 因此,在任何其他形状的导入之前,通过在我的链中明确地放置导入,它可以工作 .

相关问题