2017-02-22 18 views
1

私は基本的なPythonマッピングライブラリで地理空間データを使用する方法を学んでいます。これはShapely/Polygons/Basemap /などで初めての作業です。ベースマップ上に塗りつぶしたポリゴンを描く__getitem__エラー

私は、ある領域内の近隣を表すポリゴンのセットを持っています。私ははっきりそれらを描きたい場合は、以下の機能がトリック(mymapというだけのベースマップオブジェクトである、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') 

をこれがうまく機能し、私はアウトラインを取得します地図上の各地域のしかし、私はそれぞれの近所のための外部データに基づいて近隣を陰にしたいと思っています(例えば、ピッツェリアがない場合は白、100以上のピッツェリアがある場合は赤など)。これを行うために、私はカラーマップ、カラーバーなどを作成します。その後

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"]は存在しないため、ポリゴン型である必要があります。しかし、これは既成の図書館「descartes」にあるので、なぜこのエラーが出てくるのか混乱しています。私はdescartesで発生するこのエラーの周りを検索しようとしましたが、任意のリードを見つけることができません。だから私は何か愚かなことをやっていると思う。どんな洞察?

+0

この機能のために異なる呼び出しがある: '#パッチ GEO =ポリゴンに#1からポリゴンのにGeoJSONっぽい辞書形を回し.__ geo_interface__ パッチ= PolygonPatch(GEO、のFaceColor = '#cccccc'、edgecolor = '#999999') ax.add_patch(patch) ' –

+0

彼の例を確認してください。呼び出しは少し異なります。私は著者が入力を受け取ったかどうかわからない –

+0

こんにちは@PiotrKamoda、ありがとう入力します。これはGeoJSONオブジェクトに当てはまりますが、shapely/matplotlibポリゴンの場合、この変換を行わないと呼び出しで十分でなければなりません。以下の例をご覧ください:https://bitbucket.org/sgillies/descartes/src/4333a49e7339eeeb277c8fa7346b175597a8951c/examples/patches.py?at=default&fileviewer=file-view-default – Zach

答えて

1

記録のために、多くの試行錯誤の後にこの問題を解決しました。輸入注文が重要であることが判明しました。このケースでは、別のインポート(インポートA;内部でA.pyをインポートしてもらっている)を介してShapelyをインポートしていました。デカルトは何らかの理由で輸入からの輸入と相互作用することができませんでした。だから、他の輸入品よりも前に明示的に輸入品を私のチェーンに入れておくと、効果があります。 descratesのドキュメントで

関連する問題