Actualizar coordenadas en geopaquete con shapefile

Aug 17 2020

Tengo un archivo de geopaquete que tiene toda la información sobre ciertos elementos, pero las coordenadas deben actualizarse. Estoy usando un viejo GPS Leica 1200 para obtener las nuevas coordenadas y dar la misma ID a estos puntos que tienen en el geopaquete.

¿Cuál es la mejor manera de actualizar las coordenadas en el geopaquete con las del shapefile generado por el GPS sabiendo que la ID será la misma? He estado usando la función VLOOKUP de Excel para esto pero me gustaría saber si hay una manera para hacerlo dentro de QGIS.

Respuestas

2 user30184 Aug 18 2020 at 14:08

Es posible, pero no trivial, hacer eso con ogr2ogr y ogrinfo. El shapefile debe insertarse primero en GeoPackage, pero puede eliminarse una vez que se hayan actualizado las geometrías.

Datos fuente

jointest1 contiene 2 puntos

  ID (Integer) = 11
  POINT (77 33)

  ID (Integer) = 22
  POINT (15 35)

jointest2 contiene también dos puntos

  ID (Integer) = 22
  POINT (5 25)

  ID (Integer) = 0
  POINT (3 2)

El objetivo es actualizar la función 22 -> PUNTO (5 25) y mantener la función 11 como PUNTO (77 33). La función con ID = 0 que no existe en jointest1 no debe agregarse.

La capa jointest1 está en GeoPackage "jointest.gpkg" y ​​jointest2 es shapefile. Primero importe también jointest2 en GeoPackage.

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

Luego use ogrinfo con el parámetro -sql para ejecutar el comando de actualización. La sintaxis del comando se toma dehttps://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 

Compruebe lo que tenemos ahora en jointest1

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

  ID (Integer) = 22
  POINT (5 25)

Ahora podemos eliminar la tabla jointest2 y vaciar la base de datos. Si simplemente quita la tabla de una base de datos SQLite, el tamaño del archivo sigue siendo el mismo hasta que vacíe la base de datos. No es peligroso si no aspira, solo tendrá un archivo de base de datos un poco más grande en el disco.

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

Actualizar las coordenadas es difícil y probablemente requeriría un poco de manipulación avanzada. En su lugar, recomendaría:

  • Abra ambos archivos en QGIS
  • Une los atributos de la capa GeoPackage a la capa Shapefile usando el ID
  • Guarde esa capa como un nuevo GeoPackage

De esa manera, no tiene que tocar el procesamiento de geometría, sino solo los datos de atributos, lo que es mucho más fácil.