ogr2ogr menggabungkan beberapa shapefile: Apa tujuan dari tag -nln?

11

Skrip dasar untuk mengulang secara rekursif atas sub-folder dan menggabungkan semua shapefile menjadi satu adalah:

#!/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

Arahkan pada semua contoh di web secara vertikal saya perhatikan bahwa untuk kasus di mana saya memperbarui file output, -nlntag ditambahkan, misalnya:

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

Menurut dokumentasi itu tertulis:

Tetapkan nama alternatif ke layer baru

Dan saya perhatikan itu menciptakan shapefile sementara yang disebut "digabung", dan pada akhir loop file identik dengan shapefile terakhir yang saya gabungkan.

Saya tidak mengerti mengapa saya membutuhkan ini? Karena saya berhasil bergabung dengan sukses tanpa tag ini.

michael
sumber

Jawaban:

19

Untuk GDAL ada datastore yang berisi lapisan. Beberapa datastore, seperti yang databasenya atau GML, dapat menampung beberapa layer tetapi beberapa yang lain seperti shapefile hanya dapat berisi satu layer.

Anda dapat menguji dengan misalnya driver GeoPackage apa yang terjadi jika Anda tidak menggunakan -nln switch dengan datastore yang dapat berisi banyak lapisan.

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)

Pengandar shapefile tidak selalu memerlukan nama layer karena jika Anda memberikan nama datastore "a.shp" driver memiliki logika untuk melihat satu layer, dinamai dengan nama dasar dari shapefile. Karena itu Anda dapat menambahkan data ke "merged.shp" dengan perintah:

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

Namun, driver shapefile juga memiliki logika lain untuk mempertimbangkan datastore yang namanya diberikan tanpa ekstensi .shp sebagai datastore multi-layer. Secara praktis ini berarti direktori yang berisi satu atau lebih shapefile sebagai lapisan. Anda dapat menguji apa yang terjadi dengan perintah

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

Atau Anda dapat mengedit skrip Anda sedikit untuk dimiliki

consolidated_file="./consolidated"

Jika Anda ingin menambahkan data dengan ogr2ogr, Anda harus menggunakan sakelar -nln dengan beberapa driver, termasuk beberapa yang tidak mendukung banyak lapisan. Untuk beberapa driver lain tidak sepenuhnya diperlukan, tetapi menggunakan -nln selalu aman dan untungnya digunakan pada contoh yang Anda temukan. Kalau tidak, kita akan memiliki banyak pertanyaan tentang mengapa penggabungan ke dalam shapefile berhasil tetapi menggabungkan ke format lain hanya menciptakan lapisan baru.

pengguna30184
sumber
kamu lebih cepat dari saya! Dan juga dengan beberapa informasi baru saya tidak tahu tentang output Shapefile ke direktori. Bagus!
pLumo
4

Shapefile hanya menyertakan satu Dataset (Lapisan), jadi pengaturan nama pengguna tidak diperlukan.

Jika Anda bekerja dengan PostGIS, SQLite, KML dll. Yang dapat menangani banyak lapisan dalam satu file, Anda perlu mengatur -nln. Kalau tidak, layer akan seperti nama file, dan dengan demikian tidak digabung.

pLumo
sumber