Більше

Як додати растри різного розміру до GDAL, щоб результат був лише у перетиненій області


Я пишу метод Python, який додає два растри та генерує єдиний растровий результат. З незалежних від мене причин, обсяги вхідних растрів різні, але вони перетинаються.

Чи можна працювати виключно над вхідними растровими пікселями, які перекриваються у 2 перекритих областях, щоб генерувати мій вихід таким чином, що обсяг вихідного растру є лише перетинається областю двох входів?


Перше, що потрібно зробити, це визначити прямокутник, що перекривається, у геопросторових координатах. Для цього ви отримуєте геотрансформацію для кожного вихідного зображення:

gt1 = ds1.GetGeoTransform () # r1 має ліву, верхню, праву, нижню межі набору даних у геопросторових координатах. r1 = [gt1 [0], gt1 [3], gt1 [0] + (gt1 [1] * ds1.RasterXSize), gt1 [3] + (gt1 [5] * ds1.RasterYSize)] # Зробіть те ж саме для набір даних 2… перетин = [max (r1 [0], r2 [0]), min (r1 [1], r2 [1]), min (r1 [2], r2 [2]), max (r1 [3 ], r2 [3])]

Потім перетворіть цей прямокутник у пікселі для кожного зображення, віднявши верхню та ліву координати та поділивши на розмір пікселя, округливши вгору.

Звідси можна дзвонитиReadRaster ()на кожному зображенні, надаючи йому розраховані вами пікселі:

band.ReadRaster (px1 [0], px1 [1], px1 [2] - px1 [0], px1 [3] - px1 [1], px1 [2] - px1 [0], px1 [3] - px1 [1], #  )

Я трохи втомився, тому, якщо це не має особливого сенсу, дайте мені знати!


Третій елемент перетину повинен бути min (r1 [2], r2 [2]):

перетин = [max (r1 [0], r2 [0]), min (r1 [1], r2 [1]), min (r1 [2], r2 [2]), max (r1 [3], r2 [3])]

Крім того, я б порекомендував деяку логіку, щоб перевірити, чи фактично набори даних перетинаються.

Це один підхід:

якщо (перетин [2] <перехрестя [0]) або (перетин [1] <перехрестя [3]): перетин = немає


Подивіться відео: Использование GDAL OGR в C#. Установка и настройка Using GDAL OGR via C#. Install u0026 configure (Жовтень 2021).