Aggiorna le coordinate sul geopackage con shapefile
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
È 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"
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.