อัปเดตพิกัดบน geopackage ด้วย shapefile
ฉันมีไฟล์ geopackage ที่มีข้อมูลทั้งหมดเกี่ยวกับบางรายการ แต่ต้องอัปเดตพิกัด ฉันใช้ Leica 1200 GPS รุ่นเก่าเพื่อรับพิกัดใหม่และให้ ID เดียวกันกับจุดเหล่านี้ที่มีใน geopackage
วิธีที่ดีที่สุดในการอัปเดตพิกัดใน geopackage คือวิธีใดจากไฟล์รูปร่างที่สร้างโดย GPS โดยรู้ว่า ID จะเหมือนกันฉันใช้ฟังก์ชัน VLOOKUP ของ excel สำหรับสิ่งนี้ แต่อยากทราบว่ามีวิธี เพื่อทำภายใน QGIS
คำตอบ
เป็นไปได้ แต่ไม่ใช่เรื่องเล็กน้อยที่จะทำเช่นนั้นกับ ogr2ogr และ ogrinfo ต้องใส่ shapefile ลงใน GeoPackage ก่อน แต่สามารถลบได้เมื่อมีการอัปเดตรูปทรงแล้ว
แหล่งข้อมูล
jointest1 มี 2 จุด
ID (Integer) = 11
POINT (77 33)
ID (Integer) = 22
POINT (15 35)
jointest2 ยังมีสองจุด
ID (Integer) = 22
POINT (5 25)
ID (Integer) = 0
POINT (3 2)
จุดมุ่งหมายคือการอัปเดตคุณลักษณะ 22 -> POINT (5 25) และคงคุณลักษณะ 11 ไว้เป็น POINT (77 33) ไม่ควรเพิ่มคุณลักษณะที่มี ID = 0 ที่ไม่มีใน jointest1
Layer jointest1 อยู่ใน GeoPackage "jointest.gpkg" และ jointest2 คือ shapefile นำเข้าครั้งแรก jointest2 ไปยัง GeoPackage
ogr2ogr -append -update -f gpkg jointest.gpkg jointest2.shp
ถัดไปใช้ ogrinfo กับพารามิเตอร์ -sql สำหรับรันคำสั่งอัพเดต ไวยากรณ์สำหรับคำสั่งนำมาจากhttps://stackoverflow.com/questions/19270259/update-with-join-in-sqlite.
ogrinfo -sql "update jointest1 set geom=(select geom from jointest2 where ID=jointest1.ID) where exists (select geom from jointest2 where ID=jointest1.ID)" jointest.gpkg
ตรวจสอบสิ่งที่เรามีในตอนนี้ใน jointest1
ogrinfo jointest.gpkg jointest1
…
ID (Integer) = 11
POINT (77 33)
ID (Integer) = 22
POINT (5 25)
ตอนนี้เราสามารถวางตาราง jointest2 และดูดฐานข้อมูลได้ หากคุณเพิ่งวางตารางจากฐานข้อมูล SQLite ขนาดไฟล์จะยังคงเท่าเดิมจนกว่าคุณจะดูดฐานข้อมูล ไม่เป็นอันตรายหากคุณไม่ดูดฝุ่นคุณก็จะมีไฟล์ฐานข้อมูลที่ใหญ่ขึ้นเล็กน้อยในดิสก์
ogrinfo jointest.gpkg -sql "drop table jointest2"
ogrinfo jointest.gpkg -sql "vacuum"
การอัปเดตพิกัดเป็นเรื่องยากและอาจต้องใช้การเล่นซอขั้นสูง ฉันอยากจะแนะนำแทน:
- เปิดทั้งสองไฟล์ใน QGIS
- เข้าร่วมแอตทริบิวต์จากเลเยอร์ GeoPackage ไปยังเลเยอร์ Shapefile โดยใช้ ID
- บันทึกเลเยอร์นั้นเป็น GeoPackage ใหม่
ด้วยวิธีนี้คุณไม่ต้องสัมผัสกับการประมวลผลรูปทรงเรขาคณิต แต่มีเพียงข้อมูลแอตทริบิวต์ซึ่งเป็นวิธีที่ง่ายกว่า