我正在尝试进行空间连接,类似于此处的示例:是否存在“按位置连接属性”的python选项?。但是,这种方法似乎效率低下/缓慢。即使仅以250点的分数运行它,也要花费近2分钟的时间,而对于> 1,000点的shapefile,它完全失败。有没有更好的方法?我想完全在Python中完成此操作,而无需使用ArcGIS,QGIS等。
我也想知道是否有可能对一个多边形内所有点的属性(即总体)求和,然后将该数量加入到多边形shapefile中。
这是我要转换的代码。我在第9行出现错误:
poly['properties']['score'] += point['properties']['score']
其中说:
TypeError:+ =:'NoneType'和'float'不受支持的操作数类型。
如果我将“ + =”替换为“ =”,则可以正常运行,但不会对字段求和。我也尝试过将它们设置为整数,但这也失败了。
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']})