ogr2ogr hợp nhất nhiều shapefiles: Mục đích của thẻ -nln là gì?


11

Kịch bản cơ bản để lặp lại đệ quy trên các thư mục con và hợp nhất tất cả các shapefile thành một tập lệnh là:

#!/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 trong vertaully tất cả các ví dụ trên web Tôi nhận thấy rằng trong trường hợp tôi cập nhật tệp đầu ra, -nlnthẻ được thêm vào, ví dụ:

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

Theo tài liệu này có ghi:

Gán tên thay thế cho lớp mới

Và tôi nhận thấy nó tạo ra một shapefile tạm thời được gọi là "đã hợp nhất" và ở cuối vòng lặp, tập tin giống hệt với shapefile cuối cùng mà tôi đã hợp nhất.

Tôi không hiểu tại sao tôi cần điều này? Bởi vì tôi đã thành công để hợp nhất thành công mà không có thẻ này.

Câu trả lời:


19

Đối với GDAL có kho dữ liệu chứa các lớp. Một số kho dữ liệu, như cơ sở dữ liệu hoặc GML, có thể chứa một số lớp nhưng một số lớp khác như shapefile chỉ có thể chứa một lớp.

Bạn có thể kiểm tra với trình điều khiển GeoPackage ví dụ điều gì xảy ra nếu bạn không sử dụng khóa -nln với kho dữ liệu có thể chứa nhiều lớp.

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)

Trình điều khiển shapefile không nhất thiết cần tên lớp vì nếu bạn đặt tên kho dữ liệu "a.shp" thì trình điều khiển có logic để xem một lớp duy nhất, được đặt tên theo tên cơ sở của shapefile. Do đó, bạn có thể thêm dữ liệu vào "merged.shp" bằng lệnh:

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

Tuy nhiên, trình điều khiển shapefile cũng có một logic khác để xem xét một kho dữ liệu mà tên được đặt mà không có phần mở rộng .shp như một kho dữ liệu nhiều lớp. Thực tế điều này có nghĩa là một thư mục chứa một hoặc nhiều shapefile dưới dạng các lớp. Bạn có thể kiểm tra những gì xảy ra với một lệnh

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

Hoặc sau đó bạn có thể chỉnh sửa tập lệnh của mình một chút để có

consolidated_file="./consolidated"

Nếu bạn muốn nối thêm dữ liệu với ogr2ogr, bắt buộc phải sử dụng khóa -nln với một số trình điều khiển, bao gồm một số trình điều khiển không hỗ trợ nhiều lớp. Đối với một số trình điều khiển khác, điều đó không thực sự cần thiết, nhưng sử dụng -nln luôn an toàn và may mắn thay, nó được sử dụng trong các ví dụ mà bạn đã tìm thấy. Nếu không, chúng ta sẽ có một loạt các câu hỏi về lý do tại sao việc hợp nhất vào shapefiles lại thành công nhưng việc hợp nhất với các định dạng khác chỉ tạo ra các lớp mới.


bạn đã nhanh hơn tôi! Và cũng với một số thông tin mới mà tôi chưa biết về đầu ra Shapefile vào một thư mục. Tuyệt quá!
pLumo

4

Shapefiles chỉ bao gồm một Dataset (Layer), vì vậy việc đặt tên người dùng là không cần thiết.

Nếu bạn làm việc với PostGIS, SQLite, KML, v.v. có thể xử lý nhiều lớp trong một tệp, bạn cần đặt -nln. Nếu không, các lớp sẽ giống như tên tệp, và do đó không được hợp nhất.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.