Làm thế nào để đọc một shapefile trong Python?


23

Câu hỏi của tôi là một phần mở rộng của các đường thẳng đứng trong một shapefile đa giác . Vui lòng tham khảo câu hỏi đó đầu tiên.

Những gì bạn sẽ thấy là một phương pháp tạo các đường thẳng đứng đối với hộp giới hạn, tại khoảng cách do người dùng xác định. Tôi hiểu rằng OGR, Fiona, Shapely, v.v. có thể được sử dụng để thực hiện bước tiếp theo của việc cắt, nhưng tôi không hiểu cách sử dụng chúng.

Làm thế nào để tôi đọc một dòng của một shapefile đa giác? Mỗi ứng dụng sử dụng Shapely chỉ cho bạn cách tạo LineString, Point hoặc Polygon nhưng không bao giờ đọc một shapefile hiện có

Vui lòng giúp tôi ít nhất là một cấu trúc bộ xương để tôi có thể xây dựng trên nó.

Câu trả lời:


40

1) đọc shapefile của bạn với Fiona , PyShp , ogr hoặc ... bằng cách sử dụng giao thức Geo_interface (GeoJSON):

với 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)])}

với 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))}

với 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) chuyển đổi sang hình dạng Shapely (với chức năng hình dạng )

# 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) tính toán

4) lưu shapefile kết quả


5
Tôi sẽ thêm geopandas vào danh sách:geopandas.read_file("my_shapefile.shp")
joris

Kể từ GDAL 2.0, thay vì osgeo.ogr.Opensử dụng osgeo.gdal.OpenEx( chi tiết ).
Kevin

1
với ogr, trước tiên tôi phải định nghĩa json là json để có thể xử lý nó thêm với hình dạng: 'first = json.loads (đầu tiên)'
Leo

11

Tôi tìm thấy geopandas là người biểu diễn tốt nhất ở đây. Mã số:

import geopandas as gpd
shapefile = gpd.read_file("shapefile.shp")
print(shapefile)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.