Страница 1 из 1
Присвоение геометрии строке с нулевой геометрией, геометрию из другого слоя
Добавлено: 21 мар 2025, 06:55
Kbigeo
Всем добрый день.
Имеется слой, допустим из PostgreSQL. В нем есть строка, с заполненными атрибутами, но нулевой геометрией.
Имеется мап-инфовский tab, из него надо геометрию присвоить строке в слое PostgreSQL, которая без геометрии.
Правка -> изменить геометрию -> добавить часть - этот метод знаю, но там надо вручную вершины протыкивать.
Хотелось бы как-то полигон целиком присвоить/скопировать.
Подскажите, есть какие-либо инструменты?
Re: Присвоение геометрии строке с нулевой геометрией, геометрию из другого слоя
Добавлено: 21 мар 2025, 08:56
AlexRomantsov
Есть общие атрибуты в postgre/tab, например id?
Re: Присвоение геометрии строке с нулевой геометрией, геометрию из другого слоя
Добавлено: 21 мар 2025, 09:04
AlexRomantsov
если есть - несколько вариантов, от sql запроса до коленных сборок.
Например,
- tab сохраняем во что то редактируемое, например в shp (не обязательно, можно создать виртуальное поле в TAB). Таблица, калькулятор полей - geom_to_wkt($geometry), результат в новое текстовое поле (или виртуальное)
- слой postgres, Свойства, Связи, Добавить связанный (shp), присоединить наше поле wkt
- слой postgres, таблица, калькулятор полей - geom_from_wkt( поле_wkt_из_shp), этим обновить поле <geometry>
Это ручной метод, зато можно (в таблице атрибутов слоя postgres с присоединенным wkt) просмотреть - остались ли не связанные записи, оценить результат до момента обновления геометрии в слое postgres. В tab могут встретится неожиданности (коллекции, точки, текстовые объекты) - в поле-тексте wkt это можно отловить. Не создаются промежуточные слои. При сохранении геометрии (wkt) из tab можно сразу трансформировать в нужную систему координат ( geom_to_wkt(transform($geometry, 'EPSG:2154', 'EPSG:4326' ) ) )
Re: Присвоение геометрии строке с нулевой геометрией, геометрию из другого слоя
Добавлено: 21 мар 2025, 09:47
AlexRomantsov
если ни как не связаны, модули типа Numerical Digitize, там можно копировать-вставлять координаты.. Но кажется, быстрее присвоить id объектам из слоя tab
Re: Присвоение геометрии строке с нулевой геометрией, геометрию из другого слоя
Добавлено: 21 мар 2025, 11:44
Kbigeo
Нет, общих атрибутов нет, и это нужно сделать не для всех строк, а для одной конкретной, с того и другого слоя.
Попробую плагин.
Re: Присвоение геометрии строке с нулевой геометрией, геометрию из другого слоя
Добавлено: 21 мар 2025, 12:51
AlexRomantsov
Ок, если что, через таблицу: выделяете объект в таб слое, Скопировать. В буфере будет wkt.
Таблица целевого слоя, находите нужную запись, выделяете. Калькулятор выражений, обновить поле геометрии, для Выделенных, в выражение: geom_from_wkt(вставить Polygon())
Re: Присвоение геометрии строке с нулевой геометрией, геометрию из другого слоя
Добавлено: 24 мар 2025, 06:51
Kbigeo
Да, хороший вариант. Подскажите пожалуйста как называется эта функция?
Re: Присвоение геометрии строке с нулевой геометрией, геометрию из другого слоя
Добавлено: 24 мар 2025, 08:05
AlexRomantsov
функция geom_from_wkt(), в скобки вставить геометрию, такую как polygon(..) или multypolygon(..), а эту геометрию получите, выделив объект на карте и нажав Скопировать. В буфере обмена будет объект в формате wkt вместе с атрибутами. Атрибуты нам не нужны, их очищаем текстовым редактором, можно прямо в этом окне
Re: Присвоение геометрии строке с нулевой геометрией, геометрию из другого слоя
Добавлено: 24 мар 2025, 09:59
Kbigeo
Вроде получилось, но почему-то кнопка "Ок" серенькая, чего-то не хватает.

- Snimok.JPG (118.11 КБ) 1769 просмотров
Re: Присвоение геометрии строке с нулевой геометрией, геометрию из другого слоя
Добавлено: 24 мар 2025, 11:34
AlexRomantsov
где то ошибка синтаксиса, типа лишней не парной скобки и т.п
Re: Присвоение геометрии строке с нулевой геометрией, геометрию из другого слоя
Добавлено: 24 мар 2025, 12:13
AlexRomantsov
может знаков после запятой слишком много
Re: Присвоение геометрии строке с нулевой геометрией, геометрию из другого слоя
Добавлено: 24 мар 2025, 12:22
Kbigeo
Выражение 'Polygon(())' надо было заключить в кавычки.
Благодарю за помощь, все замечательно.