Обновить координаты на геопакете с помощью шейп-файла

Aug 17 2020

У меня есть файл геопакета, в котором есть вся информация об определенных элементах, но координаты необходимо обновить. Я использую старый GPS Leica 1200, чтобы получить новые координаты и присвоить этим точкам тот же идентификатор, что и в геопакете.

Как лучше всего обновить координаты в геопакете координатами из шейп-файла, сгенерированного GPS, зная, что идентификатор будет таким же, я использовал для этого функцию Excel VLOOKUP, но хотел бы знать, есть ли способ сделать это внутри QGIS.

Ответы

2 user30184 Aug 18 2020 at 14:08

Это возможно, но не тривиально, сделать это с помощью ogr2ogr и ogrinfo. Шейп-файл должен быть сначала вставлен в GeoPackage, но его можно удалить после обновления геометрии.

Источник данных

jointest1 содержит 2 точки

  ID (Integer) = 11
  POINT (77 33)

  ID (Integer) = 22
  POINT (15 35)

jointest2 также содержит две точки

  ID (Integer) = 22
  POINT (5 25)

  ID (Integer) = 0
  POINT (3 2)

Цель состоит в том, чтобы обновить объект 22 -> ТОЧКА (5 25) и сохранить объект 11 как ТОЧКУ (77 33). Функцию с ID = 0, которая не существует в jointest1, добавлять не следует.

Слой jointest1 находится в GeoPackage "jointest.gpkg", а jointest2 - это шейп-файл. Сначала импортируйте также jointest2 в GeoPackage.

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

Затем используйте ogrinfo с параметром -sql для запуска команды обновления. Синтаксис команды взят из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 

Проверьте, что у нас сейчас в jointest1

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

  ID (Integer) = 22
  POINT (5 25)

Теперь мы можем удалить таблицу jointest2 и очистить базу данных. Если вы просто удалите таблицу из базы данных SQLite, размер файла останется прежним, пока вы не очистите базу данных. Это не опасно, если вы не пылесосите, у вас просто будет файл базы данных немного большего размера на диске.

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

Обновление координат сложно и, вероятно, потребует некоторых дополнительных усилий. Вместо этого я бы рекомендовал:

  • Откройте оба файла в QGIS
  • Присоедините атрибуты слоя GeoPackage к слою Shapefile, используя идентификатор
  • Сохраните этот слой как новый GeoPackage

Таким образом, вам не нужно прикасаться к обработке геометрии, а только к данным атрибутов, что намного проще.