Pythonでシェープファイルを読み取る方法は?


23

私の質問は、ポリゴンシェープファイルの垂直線の延長です。最初にその質問を参照してください。

表示されるのは、ユーザー定義の間隔で、バウンディングボックスに対して垂直線を生成する方法です。OGR、Fiona、Shapelyなどを使用して次のクリッピングのステップを実行できることは理解していますが、それらの使用法は理解していません。

ポリゴンシェープファイルの1行を読み取るにはどうすればよいですか?Shapelyを使用するすべてのアプリケーションは、LineString、Point、またはPolygonを生成する方法を示しますが、既存のシェープファイルを読み取ることはありません

少なくともスケルトン構造をサポートしてくれますので、その上に構築できます。

回答:


40

1)geo_interfaceプロトコル(GeoJSON)を使用して、FionaPyShp、ogrまたは...で シェープファイルを読み取ります。

フィオナと

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

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

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)Shapelyジオメトリへの変換(関数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)計算

4)結果のシェープファイルを保存する


5
私は、リストにgeopandasを追加します。geopandas.read_file("my_shapefile.shp")
ヨリス

GDAL 2.0では、の代わりに(details)をosgeo.ogr.Open使用します。osgeo.gdal.OpenEx
ケビン

1
ogrでは、最初にjsonをjsonとして定義し、それをさらに形良く処理できるようにしなければなりませんでした: 'first = json.loads(first)'
Leo

11

ここで最高のパフォーマンスを発揮するのはジオパンダです。コード:

import geopandas as gpd
shapefile = gpd.read_file("shapefile.shp")
print(shapefile)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.