Tôi đang cố gắng thực hiện một phép nối không gian giống như ví dụ ở đây: Có tùy chọn python để "nối các thuộc tính theo vị trí" không? . Tuy nhiên, cách tiếp cận đó có vẻ thực sự không hiệu quả / chậm. Ngay cả việc chạy này với 250 điểm khiêm tốn cũng mất gần 2 phút và nó hoàn toàn thất bại trên các shapefile với> 1.000 điểm. Có một cách tiếp cận tốt hơn? Tôi muốn làm điều này hoàn toàn bằng Python mà không cần sử dụng ArcGIS, QGIS, v.v.
Tôi cũng muốn biết liệu có thể thuộc tính SUM (tức là dân số) của tất cả các điểm nằm trong một đa giác và nối số lượng đó với shapefile đa giác không.
Đây là mã tôi đang cố gắng chuyển đổi. Tôi gặp lỗi trên dòng 9:
poly['properties']['score'] += point['properties']['score']
mà nói:
TypeError: loại toán hạng không được hỗ trợ cho + =: 'noneType' và 'float'.
Nếu tôi thay thế "+ =" bằng "=" thì nó sẽ chạy tốt nhưng điều đó không tổng hợp các trường. Tôi cũng đã thử biến chúng thành số nguyên nhưng điều đó cũng thất bại.
with fiona.open(poly_shp, 'r') as n:
with fiona.open(point_shp,'r') as s:
outSchema = {'geometry': 'Polygon','properties':{'region':'str','score':'float'}}
with fiona.open (out_shp, 'w', 'ESRI Shapefile', outSchema, crs) as output:
for point in s:
for poly in n:
if shape(point['geometry']).within(shape(poly['geometry'])):
poly['properties']['score']) += point['properties']['score'])
output.write({
'properties':{
'region':poly['properties']['NAME'],
'score':poly['properties']['score']},
'geometry':poly['geometry']})