Sử dụng Fiona của Sean Gillies, một trình bao bọc rất đơn giản của thư viện OGR ( Hướng dẫn sử dụng Fiona )
Tất cả các yếu tố của một shapefile (lược đồ, bản ghi) được xử lý bằng từ điển Python:
lược đồ của một trong những shapefiles của tôi làm ví dụ:
{'geometry': 'LineString', 'properties': {u'faille': 'str:20', u'type': 'str:20', u'id': 'int'}}
một bản ghi trong shapefile:
{'geometry': {'type': 'LineString', 'coordinates': [(269884.20917418826, 151805.1917153612), (270409.89083992655, 153146.21637285672), (272298.05355768028, 154047.38494269375), (272941.74539327814, 155484.96337552898), (272169.31519056071, 156117.92701386689)]}, 'id': '1', 'properties': {'faille': u'de Salinas', 'type': u'normale'}}
vì vậy để nhân đôi một shapefile:
from shapely.geometry import mapping, shape
import fiona
# Read the original Shapefile
with fiona.collection('original.shp', 'r') as input:
# The output has the same schema
schema = input.schema.copy()
# write a new shapefile
with fiona.collection(''file1.shp', 'w', 'ESRI Shapefile', schema) as output:
for elem in input:
output.write({'properties': elem['properties'],'geometry': mapping(shape(elem['geometry']))})
Nếu bạn muốn chia một shapefile lớn thành nhiều shapefile nhỏ hơn, mọi thứ diễn ra trong vòng lặp for nhưng tất cả các lược đồ của shapefile ban đầu được giữ nguyên trong từ điển với schema = input.schema.copy()
và{'properties': elem['properties']
xem Làm thế nào để tôi tìm thấy vectơ mang trong QGIS hoặc GRASS? cho một ví dụ về
- tách một shapefile
- bảo tồn các thuộc tính của shapefile gốc trong shapefile đã tách
- và thêm một trường mới trong shapefile tách
Đối với người dùng Mac OS X hoặc Linux, rất dễ cài đặt. Đối với người dùng Windows, hãy sử dụng phiên bản Christoph Gohlke Windows không chính thức cho các gói mở rộng Python