ogr2ogr은 여러 shapefile을 병합합니다 : -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

웹 주변의 모든 예제를 마우스로 가져 가면 출력 파일을 업데이트하는 경우 -nln태그가 추가 되는 것을 알았습니다 .

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

설명서에 따르면 다음과 같이 말합니다.

새 레이어에 대체 이름을 지정하십시오

그리고 "merged"라는 임시 shapefile을 만드는 것으로 나타났습니다. 루프가 끝나면 파일이 병합 한 마지막 shapefile과 동일합니다.

왜 이것이 필요한지 모르겠습니다. 이 태그없이 성공적으로 병합했기 때문입니다.

답변:


19

GDAL의 경우 계층을 포함하는 데이터 저장소가 있습니다. 데이터베이스 또는 GML과 같은 일부 데이터 저장소는 여러 계층을 보유 할 수 있지만 shapefile과 같은 일부 데이터 저장소는 하나의 계층 만 포함 할 수 있습니다.

예를 들어 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 확장자없이 멀티 레이어 데이터 스토어 인 데이터 스토어를 고려해야하는 또 다른 논리가 있습니다. 실제로 이것은 하나 이상의 shapefile을 레이어로 포함하는 디렉토리를 의미합니다. 명령으로 어떤 일이 발생하는지 테스트 할 수 있습니다

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

또는 스크립트를 약간 편집하여

consolidated_file="./consolidated"

ogr2ogr을 사용하여 데이터를 추가하려면 여러 계층을 지원하지 않는 드라이버를 포함하여 일부 드라이버와 함께 -nln 스위치를 사용해야합니다. 다른 드라이버의 경우 반드시 필요한 것은 아니지만 -nln을 사용하는 것이 항상 안전하며 다행히도 찾은 예제에서 사용됩니다. 그렇지 않으면 셰이프 파일로 병합하는 데 성공했지만 다른 형식으로 병합하면 새로운 레이어가 생성되는 이유에 대해 많은 질문이있을 것입니다.


당신은 나보다 빠르다! 또한 새로운 정보를 사용하여 디렉토리에 Shapefile 출력에 대해 알지 못했습니다. 큰!
pLumo

4

셰이프 파일에는 하나의 데이터 세트 (레이어) 만 포함되므로 레이어 이름을 설정할 필요가 없습니다.

한 파일에서 여러 레이어를 처리 할 수있는 PostGIS, SQLite, KML 등으로 작업하는 경우 -nln을 설정해야합니다. 그렇지 않으면 레이어는 파일 이름과 같아서 병합되지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.