Como ler um shapefile em Python?


23

Minha pergunta é uma extensão de linhas verticais em um shapefile de polígono . Por favor, consulte essa pergunta primeiro.

O que você verá é um método de gerar linhas verticais com relação à caixa delimitadora, no espaçamento definido pelo usuário. Entendo que OGR, Fiona, Shapely etc. podem ser usados ​​para executar o próximo passo do recorte, mas não entendo sua utilização.

Como leio uma linha de um shapefile de polígono? Todo aplicativo que usa Shapely mostra como gerar LineString, Point ou Polygon, mas nunca para ler um shapefile existente

Por favor, me ajude com pelo menos uma estrutura de esqueleto para que eu possa construir sobre ela.

Respostas:


40

1) ler o seu shapefile com Fiona , PyShp , OGR ou ... usando o geo_interface protocolo (GeoJSON):

com 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)])}

com 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))}

com 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}

2) conversão em geometria Shapely (com a função shape )

# now use the shape function of Shapely
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'>

3) cálculos

4) salve o shapefile resultante


5
Eu adicionaria geopandas à lista:geopandas.read_file("my_shapefile.shp")
joris 27/08

A partir do GDAL 2.0, em vez de osgeo.ogr.Open, use osgeo.gdal.OpenEx( detalhes ).
Kevin

1
com ogr, primeiro tive que definir o json como um json para poder processá-lo ainda mais com bem torneado: 'first = json.loads (first)'
Leo

11

Encontro geopandas como o melhor artista aqui. Código:

import geopandas as gpd
shapefile = gpd.read_file("shapefile.shp")
print(shapefile)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.