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

โฮเวอร์ในแนวตั้งตัวอย่างทั้งหมดในเว็บฉันสังเกตเห็นว่าสำหรับกรณีที่ฉันอัปเดตไฟล์เอาต์พุต-nlnแท็กจะถูกเพิ่มตัวอย่างเช่น:

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

ตามเอกสารระบุว่า:

กำหนดชื่อสำรองให้กับเลเยอร์ใหม่

และฉันสังเกตว่ามันสร้าง shapefile ชั่วคราวเรียกว่า "ผสาน" และในตอนท้ายของลูปไฟล์จะเหมือนกันกับ shapefile สุดท้ายที่ฉันผสาน

ฉันไม่เข้าใจว่าทำไมฉันต้องการสิ่งนี้ เพราะฉันประสบความสำเร็จในการผสานสำเร็จโดยไม่มีแท็กนี้

คำตอบ:


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)

ไดรเวอร์ shapefile ไม่จำเป็นต้องมีชื่อเลเยอร์เพราะถ้าคุณให้ชื่อที่เก็บข้อมูล "a.shp" คนขับมีลอจิกเพื่อดูเลเยอร์เดียวซึ่งตั้งชื่อโดย basename ของ shapefile ดังนั้นคุณสามารถเพิ่มข้อมูลลงใน "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 นั้นปลอดภัยและโชคดีที่มันถูกใช้ในตัวอย่างที่คุณพบ ไม่เช่นนั้นเราจะมีคำถามมากมายเกี่ยวกับสาเหตุที่การผสานเป็นรูปร่างไฟล์สำเร็จ แต่การรวมรูปแบบอื่น ๆ ก็แค่สร้างเลเยอร์ใหม่


คุณเร็วกว่าฉัน! และยังมีข้อมูลใหม่ที่ฉันไม่ทราบเกี่ยวกับผลลัพธ์ Shapefile ไปยังไดเรกทอรี ที่ดี!
pLumo

4

Shapefiles มีเพียงชุดข้อมูล (Layer) เพียงชุดเดียวดังนั้นไม่จำเป็นต้องตั้งค่าชื่อผู้ใช้

หากคุณทำงานกับ PostGIS, SQLite, KML ฯลฯ ที่สามารถจัดการหลายเลเยอร์ในไฟล์เดียวคุณต้องตั้งค่า -nln มิฉะนั้นเลเยอร์จะเป็นเหมือนชื่อไฟล์จึงไม่ถูกรวมเข้าด้วยกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.