Wie lese ich ein Shapefile in Python?


23

Meine Frage ist eine Erweiterung der vertikalen Linien in einem Polygon-Shapefile . Bitte beziehen Sie sich zuerst auf diese Frage.

Was Sie sehen werden, ist eine Methode zum Erzeugen vertikaler Linien in Bezug auf den Begrenzungsrahmen in benutzerdefinierten Abständen. Ich verstehe, dass OGR, Fiona, Shapely usw. verwendet werden können, um den nächsten Schritt des Clippings durchzuführen, aber ich verstehe ihre Verwendung nicht.

Wie lese ich eine Zeile eines Polygon-Shapefiles? In jeder Anwendung, in der Shapely verwendet wird, wird gezeigt, wie LineString, Point oder Polygon generiert werden, es wird jedoch nie ein vorhandenes Shapefile gelesen

Bitte helfen Sie mir zumindest mit einer Skelettstruktur, damit ich darauf aufbauen kann.

Antworten:


40

1) Lies dein Shapefile mit Fiona , PyShp , ogr oder ... mit dem Geo_Interface- Protokoll (GeoJSON):

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

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

mit 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) Umwandlung in Shapely Geometrie (mit der Form - Funktion)

# 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) Berechnungen

4) Speichern Sie das resultierende Shapefile


5
Ich würde der Liste geopandas.read_file("my_shapefile.shp")
Geopandas

osgeo.ogr.OpenVerwenden Sie ab GDAL 2.0 osgeo.gdal.OpenEx( Details ).
Kevin

1
mit ogr musste ich zuerst den json als json definieren, um ihn mit shapely weiter verarbeiten zu können: 'first = json.loads (first)'
Leo

11

Ich finde Geopandas hier als den besten Künstler. Code:

import geopandas as gpd
shapefile = gpd.read_file("shapefile.shp")
print(shapefile)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.