Як вирізати "черепичне зображення" з растрового набору даних за допомогою GDAL?


22

Я працюю над додатком, який повинен створити плитки (jpeg) із заданого растрового набору даних. Моя початкова схильність полягала у використанні gdal2tiles.py, але, схоже, його продуктивність може бути покращена.

Це змушує мене задати наступне запитання: Що було б найшвидшим способом вирізати "кахельне зображення" з растрового набору даних за допомогою GDAL? І під "зображенням з плиткою" я маю на увазі просто простий jpeg або png.

У своєму прототипі я використовую прив'язки MapServer C # MapScript, щоб виконати цю роботу. Тобто я створюю об’єкт карти, перебираю всі межі плитки, які мені потрібно вирізати, встановлюю розмір об’єктів карти, а потім зберігаю отримане зображення. Продуктивність цього підходу значно краща, ніж у gdal2tiles.py, але мені цікаво, чи я безпосередньо використовую GDAL, якщо не можу зробити це ще швидше. Чи може хтось запропонувати подібний робочий процес із методами GDAL?

EDIT: Після ще кількох досліджень сьогодні я знайшов відповідь прямо перед собою. Якщо ви завантажили FWTools, папки csharp \ apps містять ряд класів для демонстрації прив’язок C # GDAL. У моєму випадку GDALRead.cs і GDALReadDirect.cs були те, що я шукав.


2
@vadp, @markusn, @mapperz та всі інші - будьте описовими. На додаток до посилання речення або два щодо того, чому ви вважаєте, що цей інструмент варто переглянути, і що відрізнятиме від інших, буде корисним. Ми хочемо, щоб відповідь була корисною в майбутньому, а також відразу. Рано чи пізно ударяє посилання, і якщо все, що ми маємо, це URL, важко знайти, де проект втілився далі.
matt wilkie

4
Вітаю, користувач890, ти можеш опублікувати своє остаточне рішення питання та позначити його як закрите? у цьому випадку це здається, що використання мовних специфічних прив’язок дало вам необхідну продуктивність.
scw

Я не можу додати коментар до свого власного допису :( Але gdal_tiler.py також підтримує багатопроцесорний процес, але дуже жорстоко: він просто обробляє 'n' джерела одразу. Проте це робить позитивний ефект :)
Вадим

Відповіді:


5

Хтось витратив час, щоб gdal2tiles.py використовував декілька процесорів: паралельний gdal

Я використав це, і це, здається, працює. Він успішно використовує всі 4 ядра на 100% і скорочує загальний час для створення плиток до 1/4 початкового часу.


Ви можете перевірити gdal2tiles_parallel.py gitlab.com/GitLabRGI/geopackage-python . Я віддаю перевагу кому
GeospatialInformationTech


1

У моїй компанії ми писали спеціальні сценарії python, використовуючи gdal_warp (це було раніше, ніж ми знали, що існує gdal2tiles). Це було швидше, ніж g2t, особливо, коли ми переписали його для роботи на багатьох ядрах (використовуючи нитку путів python). Крім того, вона випускала плитки вищої якості (інтерполяція ланкцо на g2t, здається, працює погано, в результаті gdal_warp плитки були вражаючими).

Для написання сценаріїв потрібно докласти трохи зусиль, потрібно вручну обчислити отримані граничні поля, встановити деякі варіанти проекцій тощо.



0

Інший варіант - використання TileCache (WMS-C). Хоча я ніколи не використовував gdal2tiles, я не очікував, що TileCache принесе покращену продуктивність.

У будь-якому випадку наступні стратегії можуть пришвидшити розміщення плитки:

  • Металітинг, якщо використовується TileCache (цікаво, чи gdal2tiles має подібну функцію).
  • Якщо растрові дані є великим ортофото, використовуйте такий формат, як ECW . Оскільки цей формат має часткову декомпресію , за допомогою цього формату можна отримати значне збільшення продуктивності.

0

Скрипт gdal_tiler.py з http://code.google.com/p/tilers-tools може бути корисним варіантом.

Зазвичай він показує дуже хороші показники порівняно з gdal2tiles.py, і він повинен працювати з будь-яким джерелом GDAL (набором даних), зокрема, він не потребує перетворення набору даних джерела в RGB.


-1

Gdal2tiles_parallel https://gitlab.com/GitLabRGI/erdc/geopackage-python Якщо geopackage або MBTILES, то не потрібен пітон, це робиться в основному за допомогою gdal_translate.EXE. вам також потрібно запустити gdaladdo, щоб додати більше одного рівня збільшення. Я також використовую qtiles / qmetatiles для робочого столу qgis. Досі ніщо не може конкурувати з комерційним програмним забезпеченням Maptiler. Якщо вам потрібна папка плиток, просто конвертуйте MBTILES в TMS АБО XYZ за допомогою mbUtil python


Посилання більше не працює
AndrewHarvey

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.