Я пытаюсь выполнить пространственное соединение, очень похожее на приведенный здесь пример: есть ли опция Python для «объединения атрибутов по местоположению»? , Однако такой подход кажется действительно неэффективным / медленным. Даже выполнение этого со скромными 250 точками занимает почти 2 минуты, и оно полностью не работает на шейп-файлах с> 1000 точками. Есть ли лучший подход? Я хотел бы сделать это полностью в Python без использования ArcGIS, QGIS и т. Д.
Мне также было бы интересно узнать, возможно ли суммировать атрибуты (то есть совокупность) всех точек, которые попадают в полигон, и присоединять это количество к шейп-файлу полигона.
Вот код, который я пытаюсь преобразовать. Я получаю сообщение об ошибке в строке 9:
poly['properties']['score'] += point['properties']['score']
который говорит:
Ошибка типа: неподдерживаемые типы операндов для + =: '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']})