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