Aggiorna le coordinate sul geopackage con shapefile

Aug 17 2020

Ho un file geopackage che contiene tutte le informazioni su determinati articoli ma le coordinate devono essere aggiornate. Sto usando un vecchio GPS Leica 1200 per ottenere le nuove coordinate e dare lo stesso ID a questi punti che hanno nel geopackage.

Qual è il modo migliore per aggiornare le coordinate nel geopackage con quelle dello shapefile generato dal GPS sapendo che l'ID sarà lo stesso, ho utilizzato la funzione CERCA.VERT di Excel per questo ma vorrei sapere se esiste un modo per farlo all'interno di QGIS.

Risposte

2 user30184 Aug 18 2020 at 14:08

È possibile ma non banale farlo con ogr2ogr e ogrinfo. Lo shapefile deve essere prima inserito in GeoPackage ma può essere cancellato una volta che le geometrie sono state aggiornate.

Dati di origine

jointest1 contiene 2 punti

  ID (Integer) = 11
  POINT (77 33)

  ID (Integer) = 22
  POINT (15 35)

jointest2 contiene anche due punti

  ID (Integer) = 22
  POINT (5 25)

  ID (Integer) = 0
  POINT (3 2)

Lo scopo è aggiornare la funzione 22 -> PUNTO (5 25) e mantenere la funzione 11 come PUNTO (77 33). La funzione con ID = 0 che non esiste in jointest1 non deve essere aggiunta.

Il layer jointest1 è in GeoPackage "jointest.gpkg" e jointest2 è shapefile. Prima importa anche jointest2 in GeoPackage.

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

Quindi utilizzare ogrinfo con il parametro -sql per eseguire il comando di aggiornamento. La sintassi del comando è presa dahttps://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 

Controlla quello che abbiamo ora in jointest1

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

  ID (Integer) = 22
  POINT (5 25)

Ora possiamo eliminare la tabella jointest2 e svuotare il database. Se si rilascia la tabella da un database SQLite, la dimensione del file rimane la stessa fino a quando non si svuota il database. Non è pericoloso se non aspiri, avrai solo un file di database un po 'più grande su disco.

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

L'aggiornamento delle coordinate è difficile e probabilmente richiederebbe un po 'di manipolazione avanzata. Lo consiglierei invece a:

  • Apri entrambi i file in QGIS
  • Unisci gli attributi dal livello GeoPackage al livello Shapefile utilizzando l'ID
  • Salva quel livello come un nuovo GeoPackage

In questo modo non devi toccare l'elaborazione della geometria ma solo i dati degli attributi, il che è molto più semplice.