2017-02-22 9 views
1

기본 파이썬 매핑 라이브러리에서 지형 공간 데이터를 사용하여 길을 터득하고 있습니다. Shapely/Polygons/Basemap/등으로 작업 한 것은 이번이 처음입니다.베이스 맵에 채워진 다각형을 그리면 __getitem__ 오류가 발생합니다.

주어진 영역의 주변을 설명하는 다각형 세트가 있습니다. 난 그냥 보통으로 그들을 잡아하려면, 아래의 기능은 (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+ 피자 가게가 있으면 빨간색)를 기반으로 이웃을 음영 처리하고 싶습니다. 이렇게하기 위해, 나는 colormap, colorbar 등을 만든다. 그런 다음

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

I이 (이 예 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 polygon [ "type"]이 존재하지 않으며 polygon.type이어야하기 때문에 오류가 발생할 가능성이 높습니다. 그러나 이것은 미리 만들어진 라이브러리 'descartes'에 있습니다. 그래서이 오류가 왜 발생하는지 혼란 스럽습니다. 내가 descartes에서 발생하는이 오류에 대한 주위를 검색 해봤지만, 어떤 단서를 찾을 수 없습니다; 그래서 나는 바보 같은 짓을하고 있다고 가정합니다. 어떤 통찰력?

+0

이 기능에 대해 다른 전화가 : '# 패치 패치 geo_interface__ .__ = 다각형 지역에 # 1에서 다각형의 GeoJSON 틱 딕셔너리 형태 우회전 = PolygonPatch (지역, facecolor = '#cccccc', edgecolor = '# 999999') ax.add_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

기록상 많은 시행 착오 끝에이 문제를 해결했습니다. 수입 주문이 중요하다는 것이 밝혀졌습니다. 이 경우 다른 가져 오기를 통해 Shapely를 가져오고있었습니다 (가져 오기 A; A.py 내부는 매끄럽게 가져옵니다). 데카르트는 어떤 이유로 든 수입에서 수입과 상호 작용할 수 없었다. 그래서 매끈하게 다른 수입품보다 먼저 내 사슬에 명시 적으로 수입을 넣으면 작동합니다. descrates의 설명서