Saya mencoba melakukan join spasial seperti contoh di sini: Apakah ada opsi python untuk "menggabungkan atribut berdasarkan lokasi"? . Namun, pendekatan itu tampaknya sangat tidak efisien / lambat. Bahkan menjalankan ini dengan 250 poin sederhana membutuhkan waktu hampir 2 menit dan gagal sepenuhnya pada shapefile dengan> 1.000 poin. Apakah ada pendekatan yang lebih baik? Saya ingin melakukan ini sepenuhnya dalam Python tanpa menggunakan ArcGIS, QGIS, dll.
Saya juga tertarik untuk mengetahui apakah itu mungkin untuk atribut SUM (yaitu populasi) dari semua titik yang termasuk dalam poligon dan menggabungkan jumlah itu ke poligon.
Ini kode yang saya coba konversi. Saya mendapatkan kesalahan di saluran 9:
poly['properties']['score'] += point['properties']['score']
yang mengatakan:
TypeError: jenis operan yang tidak didukung untuk + =: 'NoneType' dan 'float'.
Jika saya mengganti "+ =" dengan "=" itu berfungsi dengan baik tapi itu tidak menjumlahkan bidang. Saya juga mencoba menjadikan ini sebagai bilangan bulat tetapi gagal juga.
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']})