ogr2ogr злиття декількох файлів: Яке призначення тегу -nln?


11

Основний сценарій для рекурсивного повторення підпапок і об'єднання всіх файлів форм в одну - це:

#!/bin/bash
consolidated_file="./consolidated.shp"
for i in $(find . -name '*.shp'); do
    if [ ! -f "$consolidated_file" ]; then
        # first file - create the consolidated output file
        ogr2ogr -f "ESRI Shapefile" $consolidated_file $i
    else
        # update the output file with new file content
        ogr2ogr -f "ESRI Shapefile" -update -append $consolidated_file $i
    fi
done

Hoverer у всіх прикладах по всій мережі Інтернету я помітив, що для випадку, коли я оновлюю вихідний файл, -nlnдодається тег, наприклад:

ogr2ogr -f "ESRI Shapefile" -update -append $consolidated_file $i -nln merged

Згідно з документацією сказано:

Призначте альтернативне ім’я новому шару

І я помітив, що він створює тимчасовий файл з назвою "злитий", і в кінці циклу файл ідентичний останньому файлу форми, який я об'єднав.

Я не розумію, навіщо мені це потрібно? Тому що мені вдалося об’єднатися успішно без цього тегу.

Відповіді:


19

Для GDAL є сховища даних, які містять шари. Деякі сховища даних, як-от бази даних або GML, можуть містити декілька шарів, але деякі інші, як файли форм, можуть містити лише один шар.

Ви можете перевірити, наприклад, драйвер GeoPackage, що станеться, якщо ви не використовуєте перемикач -nln із сховищем даних, який може містити багато шарів.

ogr2ogr -f gpkg merged.gpkg a.shp
ogr2ogr -f gpkg -append -update merged.gpkg b.shp

ogrinfo merged.gpkg
INFO: Open of `merged.gpkg'
      using driver `GPKG' successful.
1: a (Polygon)
2: b (Polygon)

Драйвер формфайлу не обов'язково потребує імені шару, тому що якщо ви даєте ім'я сховища даних "a.shp", у драйвера є логіка бачити один шар, названий базовим іменем файлу форми. Тому ви можете додати дані до "merged.shp" за допомогою команди:

ogr2ogr -f "ESRI Shapefile" merged.shp a.shp
ogr2ogr -f "ESRI Shapefile" -append -update merged.shp b.shp

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

ogr2ogr -f "ESRI Shapefile" merged a.shp
ogr2ogr -f "ESRI Shapefile" -append -update merged b.shp

Або тоді ви можете трохи відредагувати свій сценарій

consolidated_file="./consolidated"

Якщо ви хочете додати дані з ogr2ogr, обов'язково слід використовувати перемикач -nln з деякими драйверами, включаючи декілька, які не підтримують декілька шарів. Для деяких інших драйверів це не суворо потрібно, але використання -nln завжди безпечно, і на щастя, воно використовується у знайдених прикладах. Інакше у нас виникне маса питань про те, чому об’єднання у shapefiles є успішним, але злиття з іншими форматами просто створює нові шари.


ти був швидшим за мене! А також з новою інформацією, яку я не знав про вихід Shapefile в каталог. Чудово!
pLumo

4

Shapefiles включає лише один набір даних (Layer), тому встановлювати назву шару не потрібно.

Якщо ви працюєте з PostGIS, SQLite, KML тощо, які можуть обробляти кілька шарів в одному файлі, вам потрібно встановити -nln. Інакше шари будуть схожі на імена файлів, і, таким чином, не зливаються.

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