파이썬에서 shapefile을 읽는 방법?


23

내 질문은 다각형 shapefile에서 세로선 의 확장입니다 . 먼저 그 질문을 참조하십시오.

표시되는 것은 사용자 정의 간격에서 경계 상자와 관련하여 수직선을 생성하는 방법입니다. OGR, Fiona, Shapely 등을 사용하여 다음 클리핑 단계를 수행 할 수 있지만 활용도를 이해하지 못합니다.

다각형 shapefile의 한 줄을 어떻게 읽습니까? Shapely를 사용하는 모든 응용 프로그램은 LineString, Point 또는 Polygon을 생성하지만 기존 shapefile 을 읽지 않는 방법을 보여줍니다.

뼈대 구조를 최소한으로 도와서 빌드 할 수 있도록하십시오.

답변:


40

1) Fiona , PyShp , ogr 또는 geo_interface 프로토콜 (GeoJSON)을 사용 하여 shapefile을 읽습니다 .

피오나와 함께

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) 변환 매끈한의 와 형상 ( 형상 함수)

# 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) 결과 shapefile을 저장


5
나는 목록에 geopandas를 추가 할 것입니다 :geopandas.read_file("my_shapefile.shp")
joris

대신 GDAL 2.0 이후는, 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.