5 votos

Iterar a través de un shapefile

¿Cómo puedo iterar a través de un shapefile utilizando shapely. Este es mi código, pero sigue mostrando la misma identificación. Creo que sigue buscando en el mismo registro.

fc = fiona.open("file1.shp")
print fc.schema
for counter in range(0,50):    
    shapefile_record = fc.next()
    print shapefile_record['id']

15voto

GreyCat Puntos 146

fc.next() es un simple iterador:

fc = fiona.open("my.shp")
first_feature = fc.next()
second_feature = fc.next()
...

O más sencillamente:

for feat in fiona.open("my.shp")
     print feat

El resultado es un diccionario de Python. Por ejemplo, con un resultado (feat=)

{'geometry': {'type': 'Point', 'coordinates': (180627.0, 330190.0)}, 'type': 'Feature', 'id': '154', 'properties': OrderedDict([(u'cadmium', 2.7), (u'copper', 27.0), (u'lead', 124.0), (u'zinc', 375.0), (u'elev', 8.261), (u'dist', 0.0122243), (u'om', 5.5), (u'ffreq', u'3'), (u'soil', u'3'), (u'lime', u'0'), (u'landuse', u'W'), (u'dist.m', 40.0)])}

Como todos los diccionarios en Python, hay claves y valores.

print feat.keys()
['geometry', 'type', 'id', 'properties']

Así que

print feat['id'] #gives the id
154
print feat['properties']['cadmium'] # gives the value of the cadmium attribute
2.7
print feat['geometry'] # gives the geometry, GeoJSON format
{'type': 'Point', 'coordinates': (180627.0, 330190.0)}

Si desea transformar esta geometría en una geometría con forma, utilice la función forma función:

print type(feat['geometry'])
<type 'dict'>
from shapely.geometry import shape
print shape(feat['geometry'])
POINT (180627 330190)
print type(shape(feat['geometry']))
<class 'shapely.geometry.point.Point'>

Final

 with fiona.open("my.shp") as input:
     for feat in input:
         geom = shape(feat['geometry'])
         id = feat['id']
         cadmium = feat['properties']['cadmium']
         ....

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X