Параметрический запрос к PostGIS через QGIS (я чайник)

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
Sviazist
Новоприбывший
Сообщения: 14
Зарегистрирован: 11 мар 2015, 07:41
Репутация: 0

Параметрический запрос к PostGIS через QGIS (я чайник)

Сообщение Sviazist » 11 мар 2015, 08:10

Всем доброго дня. Честно пытался найти информацию по интересующему меня вопросу, но вся похожая информация о совершенно других вещах. Либо решения моей проблемы не существует, либо его никто не описывал. Потому беспокою. Собственно, задача в чём. Имеется сервер с базой данных PostGIS, имеются слои с пространственными данными, которые отображены на карте (топологическая схема сети связи: узлы, соединительные линии, муфты и т.д.). Так же имеются таблицы кроссировок по узлам, оборудования, установленного на узлах, соединений в муфтах. Данные таблицы не имеют полей геометрии, но каждая запись содержит поле с однозначной ссылкой на объект, имеющий геометрию. Допустим, имеется таблица с характеристиками используемого на сети оборудования, и для каждой единицы оборудования указано имя узла, на котором данное оборудование установлено. Узлы на карте отображаются. Возможно ли как-то средствами qgis реализовать запрос, чтобы для выделенного узла отображалась таблица установленного именно на этом узле оборудования (запрос с параметром по полю, содержащему имя узла)? Таблица должна быть редактируемой, т.е. при замене, добавлении или демонтаже оборудования можно было сохранить данные изменения в базе сразу из QGIS. Главная сложность здесь - как реализовать запрос к таблице, не включенной в проект QGIS, но находящейся в той же базе данных, что и выделенный объект? Надеюсь, достаточно точно описал задачу. Заранее всем большое спасибо.

Sviazist
Новоприбывший
Сообщения: 14
Зарегистрирован: 11 мар 2015, 07:41
Репутация: 0

Re: Параметрический запрос к PostGIS через QGIS (я чайник)

Сообщение Sviazist » 11 мар 2015, 10:01

Ещё вопрос в догонку - почему неактивна кнопка "конструктор запросов" в свойствах слоя (вкладка "общие")? Слой - таблица PostgreSQL без геометрии. Все руководства ссылаются на эту кнопку, но она неактивна. Как её активировать?

Sviazist
Новоприбывший
Сообщения: 14
Зарегистрирован: 11 мар 2015, 07:41
Репутация: 0

Re: Параметрический запрос к PostGIS через QGIS (я чайник)

Сообщение Sviazist » 11 мар 2015, 10:03

Извиняюсь, последний вопрос снят. Кнопка стала активной после удаления слоя и добавления его по новой.

Sviazist
Новоприбывший
Сообщения: 14
Зарегистрирован: 11 мар 2015, 07:41
Репутация: 0

Re: Параметрический запрос к PostGIS через QGIS (я чайник)

Сообщение Sviazist » 11 мар 2015, 13:04

В общем, на данный момент проблема почти решена. Таблица без геометрии так же добавлена в проект, и меня вполне устроит редактировать её через инструмент "таблица атрибутов" в QGIS. Вопрос в том, чтобы в этой таблице отображались не все записи слоя, а лишь те, у которых поле "node_name" совпадает с полем "name" у объекта слоя "nodes", выделенного на данный момент на карте. Т. е. чтобы получать таблицу оборудования именно для выделенного узла. Большего и не требуется. Как передавать данные полей между слоями? Забивать в фильтр имя узла руками не пойдёт, т.к. базой будут пользоваться несколько человек, и данное решение будет неудобным. Оставлю его, как последний вариант. Жду предложений. Скорее всего, я в шаге от решения, и оно не представляет большой сложности, но в силу своей почти полной чайниковости не могу понять, как именно мне это реализовать. Может, есть какая-нибудь команда на получение значения поля выделенного объекта, даже если он находится на другом слое? Далее останется лишь включить эту команду в конструктор запросов слоя. Но я не могу найти ничего подобного, хотя, казалось бы, вещь элементарная. Не поверю, что ни у кого не возникало подобной потребности.

Sviazist
Новоприбывший
Сообщения: 14
Зарегистрирован: 11 мар 2015, 07:41
Репутация: 0

Re: Параметрический запрос к PostGIS через QGIS (я чайник)

Сообщение Sviazist » 17 мар 2015, 07:48

Собственно, кому интересно, что получилось в итоге. Кривовато, конечно, но ничего лучше пока не придумал. Для узлов связи добавляем в базе данных поле "focus", его же добавляем в таблицы оборудования и оптических волокон. В разделе "стиль" в свойствах слоя "узлы" создаём правило - выделять цветом узлы, у которых поле "focus" равно 1. Делаем триггер в базе, который при изменении поля фокус для какого-либо узла меняет это поле и для оборудования/волокон, у которых узел совпадает с обновляемым. Для добавленных в проект QGIS таблиц оборудования и волокон (которые без геометрии) устанавливаем в свойствах слоя условие включения в проект - "focus" = 1 (Свойства слоя -> Общие -> Конструктор запросов. Вводим: "focus" = 1). В итоге получаем:
1. Инструментом определения объектов (на картинке нажат) выбираем требуемый узел (A) и устанавливаем для него значение поля "focus", равное 1. При этом узел выделяется цветом. Сохраняем изменения.
2. Триггер в базе данных PostgreSQL автоматически устанавливает значение поля "focus", равное 1, для всех волокон и всего оборудования, принадлежащего узлу A. Данное действие пользователь никак не наблюдает. Типа магия.
3. Открываем таблицу атрибутов слоя волокон, который без геометрии. В таблице присутствуют только соединительные патчкорды, принадлежащие данному узлу, что и требовалось получить. Тот же результат имеет место и для таблицы оборудования.
4. После манипуляций с волокнами и оборудованием на узле, если далее требуется перейти к использованию данных другого узла, меняем обратно инструментом определения объектов узлу А поле "focus" на ноль, цвет узла возвращается к значению по умолчанию, после сохранения изменений база данных возвращает фокус к нулевому значению для всех причастных волокон/оборудования, и они исключаются из проекта QGIS. При необходимости можем редактировать хоть один узел, хоть несколько сразу.
Первый недостаток на данный момент заключается в громоздкости примененного решения. Был бы благодарен за напутствие на тему, как через пункт "действия" в свойствах слоя сделать действие на изменение значения поля объекта на заданное. Менять "фокус" узлов через этот инструмент было бы проще пользоваателю. Ну или подскажите иной путь, как сделать это проще.
Второй недостаток - при одновременном редактировании данных несколькими пользователями узлы, выделенные одним из них, так же станут выделенными и другим, и наоборот, при снятии выделения, оно снимется у всех пользователей. Как с этим бороться, пока не знаю. Так же жду советов на эту тему.
Вложения
result.jpeg
result.jpeg (125.08 КБ) 5315 просмотров

Аватара пользователя
SergeyRyzhkov
Гуру
Сообщения: 909
Зарегистрирован: 02 июл 2014, 19:13
Репутация: 203
Ваше звание: GP-экотеррористы
Откуда: Санкт-Петербург
Контактная информация:

Re: Параметрический запрос к PostGIS через QGIS (я чайник)

Сообщение SergeyRyzhkov » 17 мар 2015, 08:30

Рад бы помочь, но к сожалению трудно все-таки понять задачу. Вы могли бы, для начал,а привести схему БД ? (ну или в части касающегося).
У меня чуйка что в ней (схеме) ошибка, вот и тянутся далее "громоздкости" решений ...

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя