Shapefile ile jeopaketteki koordinatları güncelleyin
Belirli öğelerle ilgili tüm bilgileri içeren bir coğrafi paket dosyam var, ancak koordinatların güncellenmesi gerekiyor. Yeni koordinatları almak için eski bir Leica 1200 GPS kullanıyorum ve coğrafi paket içinde sahip oldukları bu noktalara aynı kimliği veriyorum.
Coğrafi paket içindeki koordinatları, kimliğin aynı olacağını bilerek GPS tarafından oluşturulan şekil dosyasından olanlarla güncellemenin en iyi yolu nedir, bunun için excel'in VLOOKUP işlevini kullanıyorum ancak bir yolu olup olmadığını bilmek istiyorum. QGIS içinde yapmak için.
Yanıtlar
Ogr2ogr ve ogrinfo ile bunu yapmak mümkündür ama önemsiz değildir. Şekil dosyası önce GeoPackage'a eklenmelidir, ancak geometriler güncellendikten sonra silinebilir.
Kaynak veriler
Jointest1, 2 puan içerir
ID (Integer) = 11
POINT (77 33)
ID (Integer) = 22
POINT (15 35)
Jointest2 ayrıca iki nokta içerir
ID (Integer) = 22
POINT (5 25)
ID (Integer) = 0
POINT (3 2)
Amaç, özellik 22 -> POINT (5 25) 'i güncellemek ve özellik 11'i POINT (77 33) olarak tutmaktır. Jointest1'de bulunmayan ID = 0 olan özellik eklenmemelidir.
Layer jointest1 GeoPackage'da "jointest.gpkg" ve jointest2 ise şekil dosyasıdır. GeoPackage'a ilk ithalat da jointest2.
ogr2ogr -append -update -f gpkg jointest.gpkg jointest2.shp
Daha sonra güncelleme komutunu çalıştırmak için -sql parametresiyle ogrinfo kullanın. Komutun sözdizimi şu adresten alınmıştır: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
Şimdi birlikte elimizde ne olduğunu kontrol edin1
ogrinfo jointest.gpkg jointest1
…
ID (Integer) = 11
POINT (77 33)
ID (Integer) = 22
POINT (5 25)
Şimdi, eklem2 tablosunu bırakıp veritabanını vakumlayabiliriz. Tabloyu bir SQLite veritabanından bırakırsanız, veritabanını vakumlayana kadar dosya boyutu aynı kalır. Süpürmezseniz tehlikeli değildir, sadece diskte biraz daha büyük bir veritabanı dosyanız olacaktır.
ogrinfo jointest.gpkg -sql "drop table jointest2"
ogrinfo jointest.gpkg -sql "vacuum"
Koordinatların güncellenmesi zordur ve muhtemelen bazı ileri düzey oynamalar gerektirir. Bunun yerine şunları tavsiye ederim:
- Her iki dosyayı da QGIS'te açın
- Kimliği kullanarak GeoPackage katmanındaki özellikleri Shapefile katmanına birleştirin
- Bu katmanı yeni bir GeoPackage olarak kaydedin
Bu şekilde, geometri işlemeye dokunmak zorunda değilsiniz, sadece çok daha kolay olan nitelik verilerine dokunmanız gerekiyor.