Это отличный вопрос, мне недавно пришлось сделать нечто подобное, но с гораздо меньшим набором данных, поэтому я смог использовать простое пересечение с некоторой дополнительной проверкой качества изображения, и это было прекрасно.
Но вот идея для этого, хотя у меня нет кода, и это довольно тяжелый процесс. Обязательно сначала протестируйте образец из полного набора данных. Вы можете, вероятно, немного полезного кода здесь. (Отступ стал немного странным ниже.):
взять хороший набор геометрии (где вы хотите, чтобы атрибуты заканчивались) и создать его буфер *
перебираем все функции буфера:
2а. рассчитать общую ориентацию объекта (max_y - min_y / max_x - min_x или что-то в этом роде)
2b. сделать запрос выбора по местоположению на другом слое, используя эту единственную функцию
у вас будет более одной функции, которая соответствует запросу выбора по местоположению, поэтому итерируйте эти выбранные функции и рассчитайте ориентацию каждой из них
получить атрибуты от того объекта, который имеет ориентацию, наиболее близкую к ориентации объекта буфера.
* Я бы начал с очень малого расстояния (одна единица карты или что-то еще), а затем запустил этот процесс с увеличением расстояния, стараясь не перезаписывать какие-либо атрибуты, которые вы уже передали.
** Вы могли бы, вероятно, отказаться от создания буферных объектов и просто выполнить запрос выбора по местоположению с буферным расстоянием в нем. Я не очень знаком с QGIS, но я уверен, что вы сможете это сделать.
Нет никакого способа, чтобы это работало идеально для всех ваших функций, но это только начало, а потом все сводится к разработке хорошей стратегии QA / QC для проверки и завершения передачи.
РЕДАКТИРОВАТЬ Размышляя об этом подробнее, вот базовый пример, который полностью сломал бы систему, если бы вы начинали с очень небольшого буферного расстояния и выбирали функцию с наилучшей согласованной ориентацией, как я рекомендовал:
Атрибуты от неправильной красной линии будут взяты. Чтобы избежать этого, вы можете захотеть создать некоторый вид допуска и использовать атрибуты объекта только в том случае, если его ориентация (по сравнению с ориентацией исходного синего объекта) находится в пределах этого допуска.
РЕДАКТИРОВАТЬ 2 Ой, это полигоны? Наверное, я просто предположил, что это были линии на сером фоне. Если они многоугольники, я не знаю, является ли эта концепция ориентации хорошей. Но вы можете выбрать все пересекающиеся объекты и выяснить, какие из них имеют наибольшее перекрытие (запустить инструмент типа Union, а затем использовать многоугольник с наибольшей площадью ...).