Več

Napaka pri skriptu Python pri uporabi Shapely

Napaka pri skriptu Python pri uporabi Shapely


Moj profesor nam je dal osnovno skripto Python, ki je pokazala, kako Shapely deluje z obliko datoteke, vendar zame ne deluje. Tukaj je koda:

iz preslikave uvoza shapely.geometry, oblika iz zbirke uvozov fiona z zbirko ("hawaii_vector_data.shp", "r") kot vhod: za poligon v vhodu: c = poligon ['lastnosti'] ['razred'] če je c == 0 ali c == Brez: nadaljevanje s = oblika (poligon ['geometrija']) tiskanje s

in ko ga zaženem, dobim to napako sledenja:

Sledenje (zadnji klic zadnji): Datoteka "test.py", vrstica 6, v  c = poligon ['properties'] ['class'] KeyError: 'class'

Ker sem prvič uporabljal Shapely, nimam pojma, kaj bi lahko bila napaka. Vsak nasvet bi bil odličen.


Fiona uporablja slovarje za branje datotek oblike

1) ključi slovarja = shema datoteke oblike

shape = fiona.open ("polygons.shp") # shema shapefile -> ključi slovarskega tiskanja shape.schema {'geometry': 'Polygon', 'properties': OrderedDict ([(u'id ', 'int: 10')])} # preberi prvo funkcijo datoteke shape = (153.492,19971554304, 134.793,3055883224), (153.934,50204650551, 133.892,31935858406), (152.623,97662143156, 131.811,86024627919), (150.903,91200102202, 130.894,49244872745), (149.347,66305874675, 132.991,33312884573), (149.151,08424498566, 134.383,76639298678), (151.116,87238259654, 135.890,8706318218)]]}, "tip": 'Feature', 'id': '0', 'properties': OrderedDict ([(u'id ', 2)])}

2) ključ geometrije

najprej natisni ['geometry'] # GeoJSON format {'type': 'Poligon', 'koordinate': [[(151116.87238259654, 135890.8706318218), (153492.19971554304, 134793.3055883224), (153934.50204650551, 133892.3193585819, 150903.91200102202, 130894.49244872745), (149347.66305874675, 132991.33312884573), (149151.08424498566, 134383.76639298678) [[151116.87238259654, 135890.8706318218]] [58] '[58] (153.492,19971554304, 134.793,3055883224), (153.934,50204650551, 133.892,31935858406), (152.623,97662143156, 131.811,86024627919), (150.903,91200102202, 130.894,49244872745), (149.347,66305874675, 132.991,33312884573), (149.151,08424498566, 134.383,76639298678), (151.116,87238259654, 135.890,8706318218)]]

Če želite geometrijo spremeniti v obliko Shapely

poli = oblika (prva [ 'geometrija'] natisniti poli večkotnika ((151.116,8723825965 135.890,8706318218, 153.492,199715543 134.793,3055883224, 153.934,5020465055 133.892,3193585841, 152.623,9766214316 131.811,8602462792, 150.903,912001022 130.894,4924487275, 149.347,6630587468 132.991,3331288457, 149.151,0842449857 134.383,7663929868, 151.116,8723825965 135.890,8706318218))

3) atributi -> ključ lastnosti

natisni najprej ['lastnost'] OrderedDict ([(u'id ', 2)]) # vrednost id atributa print fist [' properties '] [' id '] 2

4) imate težave

z fiona.open ("polygons.shp") kot vhod: za poligon v vhodu: c = poligon ['properties'] ['id'] s = shape (polygon ['geometry']) print c, s…

Vidite lahko, da je napaka v vašem skriptu posledica dejstva, da v lastnostih datoteke oblike ni ključa "razred".

Če želite izbrati nekatere funkcije:

z fiona.open ("polygons.shp") kot vhod: za poligon v vhodu: če je poligon ['lastnosti'] ['id']> 0: s = oblika (poligon ['geometrija']) natisni c, s