Perbarui koordinat di geopackage dengan shapefile

Aug 17 2020

Saya memiliki file geopackage yang memiliki semua informasi tentang item tertentu tetapi koordinatnya perlu diperbarui. Saya menggunakan GPS Leica 1200 lama untuk mendapatkan koordinat baru dan memberikan ID yang sama ke titik-titik yang mereka miliki di geopackage.

Apa cara terbaik untuk memperbarui koordinat di geopackage dengan yang dari shapefile yang dihasilkan oleh GPS mengetahui bahwa ID akan sama, saya telah menggunakan fungsi VLOOKUP excel untuk ini tetapi ingin tahu apakah ada cara melakukannya di dalam QGIS.

Jawaban

2 user30184 Aug 18 2020 at 14:08

Itu mungkin tetapi tidak sepele untuk melakukannya dengan ogr2ogr dan ogrinfo. Shapefile harus dimasukkan ke dalam GeoPackage terlebih dahulu, tetapi dapat dihapus setelah geometri diperbarui.

Sumber data

jointest1 berisi 2 poin

  ID (Integer) = 11
  POINT (77 33)

  ID (Integer) = 22
  POINT (15 35)

jointest2 juga mengandung dua poin

  ID (Integer) = 22
  POINT (5 25)

  ID (Integer) = 0
  POINT (3 2)

Tujuannya adalah untuk memperbarui fitur 22 -> POINT (5 25) dan menyimpan fitur 11 sebagai POINT (77 33). Fitur dengan ID = 0 yang tidak ada di jointest1 tidak boleh ditambahkan.

Layer jointest1 ada di GeoPackage "jointest.gpkg" dan jointest2 adalah shapefile. Impor pertama juga jointest2 ke GeoPackage.

ogr2ogr -append -update -f gpkg jointest.gpkg jointest2.shp

Selanjutnya gunakan ogrinfo dengan parameter -sql untuk menjalankan perintah update. Sintaks untuk perintah diambil darihttps://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 

Periksa apa yang kita miliki sekarang di jointest1

ogrinfo jointest.gpkg jointest1
…
  ID (Integer) = 11
  POINT (77 33)

  ID (Integer) = 22
  POINT (5 25)

Sekarang kita dapat menghapus tabel jointest2 dan menyedot database. Jika Anda hanya melepaskan tabel dari database SQLite, ukuran file tetap sama sampai Anda menyedot database. Tidak berbahaya jika Anda tidak menyedot debu, Anda hanya akan memiliki file database yang sedikit lebih besar pada disk.

ogrinfo jointest.gpkg -sql "drop table jointest2"
ogrinfo jointest.gpkg -sql "vacuum" 
bugmenot123 Aug 17 2020 at 16:04

Memperbarui koordinat itu sulit dan mungkin memerlukan beberapa pengotak-atik tingkat lanjut. Saya akan merekomendasikan sebagai gantinya untuk:

  • Buka kedua file di QGIS
  • Gabungkan atribut dari lapisan GeoPackage ke lapisan Shapefile menggunakan ID
  • Simpan layer itu sebagai GeoPackage baru

Dengan begitu Anda tidak perlu menyentuh pemrosesan geometri tetapi hanya data atribut yang jauh lebih mudah.