Bagaimana cara membaca shapefile dengan Python?

23

Pertanyaan saya adalah perpanjangan garis Vertikal dalam bentuk poligon . Silakan merujuk pertanyaan itu terlebih dahulu.

Apa yang akan Anda lihat adalah metode menghasilkan garis vertikal sehubungan dengan kotak pembatas, pada jarak yang ditentukan pengguna. Saya mengerti bahwa OGR, Fiona, Shapely dll. Dapat digunakan untuk melakukan langkah selanjutnya dari kliping, tetapi saya tidak mengerti pemanfaatannya.

Bagaimana cara membaca satu baris polifon shapefile? Setiap aplikasi yang menggunakan Shapely menunjukkan cara menghasilkan LineString, Point atau Polygon tetapi tidak pernah membaca shapefile yang ada

Mohon membantu saya dengan setidaknya kerangka struktur sehingga saya dapat membangunnya.

Akhil
sumber

Jawaban:

40

1) baca shapefile Anda dengan Fiona , PyShp , ogr atau ... menggunakan protokol geo_interface (GeoJSON):

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

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

dengan 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) konversi ke geometri Shapely (dengan fungsi bentuk )

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

4) simpan shapefile yang dihasilkan

gen
sumber
5
Saya akan menambahkan geopanda ke daftar:geopandas.read_file("my_shapefile.shp")
joris
Pada GDAL 2.0, alih-alih osgeo.ogr.Open, gunakan osgeo.gdal.OpenEx( perincian ).
Kevin
1
dengan ogr, saya pertama-tama harus mendefinisikan json sebagai json untuk dapat memprosesnya lebih lanjut dengan rupawan: 'first = json.loads (first)'
Leo
11

Saya menemukan geopanda sebagai pemain terbaik di sini. Kode:

import geopandas as gpd
shapefile = gpd.read_file("shapefile.shp")
print(shapefile)
Mobasshir Bhuiyan
sumber