ogr2ogr merge çoklu şekil dosyaları: -nln etiketinin amacı nedir?


11

Alt klasörler üzerinde yinelemeli olarak yineleme yapmak ve tüm şekil dosyalarını tek bir dosyada birleştirmek için temel komut dosyası:

#!/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, web'deki tüm örneklerde, çıktı dosyasını güncellediğim durumda, -nlnetiketin eklendiğini fark ettim , örneğin:

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

Belgelere göre diyor ki:

Yeni katmana alternatif bir ad atayın

Ve "birleştirilmiş" adı verilen geçici bir şekil dosyası oluşturduğunu fark ettim ve döngünün sonunda dosya, birleştirdiğim son şekil dosyasıyla aynı.

Neden buna ihtiyacım olduğunu anlamıyorum? Çünkü bu etiket olmadan başarılı bir şekilde birleşmeyi başardım.

Yanıtlar:


19

GDAL için katmanlar içeren veri depoları vardır. Veritabanı veya GML gibi bazı veri depoları birkaç katman tutabilir, ancak şekil dosyaları gibi bazıları sadece bir katman içerebilir.

Örneğin, GeoPackage sürücüsü ile -nln anahtarını birçok katman içerebilen bir veri deposuyla kullanmazsanız ne olacağını sınayabilirsiniz.

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)

Şekil dosyası sürücüsünün mutlaka katman adına ihtiyacı yoktur, çünkü "a.shp" veri deposu adını verirseniz, sürücünün şekil dosyasının taban adı ile adlandırılan tek bir katmanı görmek için mantığı vardır. Bu nedenle "merged.shp" dosyasına komutla veri ekleyebilirsiniz:

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

Bununla birlikte, shapefile sürücüsünün .shp uzantısı olmadan verilen çok katlı bir veri deposu olarak verilen bir veri deposunu da dikkate almak için başka bir mantığı vardır. Pratik olarak bu, katman olarak bir veya daha fazla şekil dosyası içeren bir dizin anlamına gelir. Bir komutla ne olduğunu test edebilirsiniz

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

Ya da daha sonra sahip olmak için betiğinizi biraz düzenleyebilirsiniz.

consolidated_file="./consolidated"

Eğer ogr2ogr ile veri eklemek istiyorsanız -nln anahtarını bazı sürücülerle kullanmak zorunludur, bunlardan bazıları birden fazla katmanı desteklemez. Diğer bazı sürücüler için kesinlikle gerekli değildir, ancak -nln kullanmak her zaman güvenlidir ve neyse ki bulduğunuz örneklerde kullanılır. Aksi takdirde, şekil dosyalarına birleştirmenin neden başarılı olduğu, ancak diğer biçimlerle birleştirmenin yalnızca yeni katmanlar oluşturduğu hakkında bir sürü sorumuz olurdu.


benden daha hızlıydın! Ayrıca bazı yeni bilgilerle bir dizine Shapefile çıktısını bilmiyordum. Harika!
pLumo

4

Şekil dosyaları yalnızca bir Veri Kümesi (Katman) içerir, bu nedenle bir katman adı ayarlamak gerekli değildir.

Bir dosyada birden çok katmanı işleyebilen PostGIS, SQLite, KML vb. İle çalışıyorsanız, -nln değerini ayarlamanız gerekir. Aksi takdirde katmanlar dosya adları gibi olur ve bu nedenle birleştirilmez.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.