67 votos

Lectura de shapefile en Python

Mi pregunta es una extensión de Líneas verticales en un shapefile de polígonos . Por favor, remítase primero a esa pregunta.

Lo que verá es un método para generar líneas verticales con respecto al cuadro delimitador, con un espaciado definido por el usuario. Tengo entendido que OGR, Fiona, Shapely, etc. pueden ser utilizados para hacer el siguiente paso de recorte, pero no entiendo su utilización.

¿Cómo se lee una línea de un shapefile poligonal? Todas las aplicaciones que utilizan Shapely muestran cómo generar el Punto, la LíneaString o el Polígono pero nunca para leer un shapefile existente.

Por favor, ayúdenme con al menos una estructura de esqueleto para que pueda construir sobre ella.

88voto

GreyCat Puntos 146
  1. leer su shapefile con Fiona , PyShp ogr o ...utilizando el geo_interfaz (GeoJSON):

con Fiona

import fiona

shape = fiona.open("my_shapefile.shp")
print shape.schema
{'geometry': 'LineString', 'properties': OrderedDict([(u'FID', 'float:11')])}
#first feature of the shapefile
first = shape.next()
print first # (GeoJSON format)
{'geometry': {'type': 'LineString', 'coordinates': [(0.0, 0.0), (25.0, 10.0), (50.0, 50.0)]}, 'type': 'Feature', 'id': '0', 'properties': OrderedDict([(u'FID', 0.0)])}

con PyShp

import shapefile

shape = shapefile.Reader("my_shapefile.shp")
#first feature of the shapefile
feature = shape.shapeRecords()[0]
first = feature.shape.__geo_interface__  
print first # (GeoJSON format)
{'type': 'LineString', 'coordinates': ((0.0, 0.0), (25.0, 10.0), (50.0, 50.0))}

con ogr:

from osgeo import ogr

file = ogr.Open("my_shapefile.shp")
shape = file.GetLayer(0)
#first feature of the shapefile
feature = shape.GetFeature(0)
first = feature.ExportToJson()
print first # (GeoJSON format)
{"geometry": {"type": "LineString", "coordinates": [[0.0, 0.0], [25.0, 10.0], [50.0, 50.0]]}, "type": "Feature", "properties": {"FID": 0.0}, "id": 0}
  1. conversión a Shapely geometría (con la forma función)

    from shapely.geometry import shape

    shp_geom = shape(first['geometry']) # or shp_geom = shape(first) with PyShp print shp_geom LINESTRING (0 0, 25 10, 50 50) print type(shp_geom) <class 'shapely.geometry.linestring.LineString'>

  2. cálculos

  3. guardar el shapefile resultante

62voto

GrawCube Puntos 143

Encuentro que GeoPandas es el que mejor funciona aquí.

import geopandas as gpd

shapefile = gpd.read_file("shapefile.shp")
print(shapefile)

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