Buradaki örnekte olduğu gibi mekansal bir birleşme yapmaya çalışıyorum: "Konumlara göre niteliklere katılmak" için bir python seçeneği var mı?. Ancak, bu yaklaşım gerçekten yetersiz / yavaş görünüyor. Bunu mütevazı bir 250 puanla çalıştırmak bile 2 dakika sürüyor ve tamamen> 1000 puan olan şekil dosyalarında başarısız oluyor. Daha iyi bir yaklaşım var mı? Bunu ArcGIS, QGIS vb. Kullanmadan tamamen Python'da yapmak istiyorum.
Ayrıca bir çokgenin içine giren tüm noktaların SUM özniteliklerinin (yani popülasyonunun) TOPLANMASI mümkün olup olmadığını bilmek ve bu miktarı çokgen şekil dosyasına birleştirmenin mümkün olup olmadığını bilmek isterim.
İşte dönüştürmeye çalıştığım kod. 9. satırda hata alıyorum:
poly['properties']['score'] += point['properties']['score']
ki diyor ki:
TypeError: + =: 'NoneType' ve 'float' için desteklenmeyen işlenen türleri.
Eğer "+ =" yerine "=" koyarsam iyi çalışır ancak bu alanları toplamaz. Bunları tamsayı olarak yapmaya çalıştım ama bu da başarısız oldu.
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']})