Atualizar coordenadas no geopacote com shapefile

Aug 17 2020

Tenho um arquivo de geopacote que contém todas as informações sobre determinados itens, mas as coordenadas precisam ser atualizadas. Estou usando um antigo GPS Leica 1200 para obter as novas coordenadas e dando a esses pontos a mesma ID que eles têm no geopacote.

Qual a melhor forma de atualizar as coordenadas do geopacote com as do shapefile gerado pelo GPS sabendo que o ID será o mesmo, estou usando a função VLOOKUP do excel para isso, mas gostaria de saber se existe uma maneira para fazer isso dentro do QGIS.

Respostas

2 user30184 Aug 18 2020 at 14:08

É possível, mas não trivial, fazer isso com ogr2ogr e ogrinfo. O shapefile deve ser inserido no GeoPackage primeiro, mas pode ser excluído assim que as geometrias forem atualizadas.

Dados de origem

jointest1 contém 2 pontos

  ID (Integer) = 11
  POINT (77 33)

  ID (Integer) = 22
  POINT (15 35)

jointest2 contém também dois pontos

  ID (Integer) = 22
  POINT (5 25)

  ID (Integer) = 0
  POINT (3 2)

O objetivo é atualizar o recurso 22 -> PONTO (5 25) e manter o recurso 11 como PONTO (77 33). O recurso com ID = 0 que não existe em jointest1 não deve ser adicionado.

A camada jointest1 está no GeoPackage "jointest.gpkg" e jointest2 é o shapefile. Primeira importação também jointest2 para GeoPackage.

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

Em seguida, use ogrinfo com o parâmetro -sql para executar o comando update. A sintaxe do comando é tirada 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 

Verifique o que temos agora em jointest1

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

  ID (Integer) = 22
  POINT (5 25)

Agora podemos eliminar a tabela jointest2 e limpar o banco de dados. Se você simplesmente remover a tabela de um banco de dados SQLite, o tamanho do arquivo permanecerá o mesmo até que você esvazie o banco de dados. Não é perigoso se você não limpar, você apenas terá um arquivo de banco de dados um pouco maior no disco.

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

Atualizar as coordenadas é difícil e provavelmente exigiria alguns ajustes avançados. Em vez disso, eu recomendaria:

  • Abra os dois arquivos no QGIS
  • Junte os atributos da camada GeoPackage à camada Shapefile usando o ID
  • Salve essa camada como um novo GeoPackage

Dessa forma, você não precisa mexer no processamento da geometria, mas apenas nos dados dos atributos, o que é muito mais fácil.