Страница 1 из 1
Кнопка запускающая алгоритм
Добавлено: 26 апр 2019, 21:06
Svility
Есть БД на PG, через менеджер бд в qgis выполняются запросы типа:
Код: Выделить всё
UPDATE "Public".buildings
SET fields1=CASE
WHEN ST_AREA(geom::geography)>500 THEN 1
WHEN ST_AREA(geom::geography)<500 THEN 0
END
так как подобный запрос выполняется очень часто, возникла необходимость оформить его в виде кнопки (плагина) в qgis. Через Plugin Builder кнопку создать не проблема, но как ее заставить выполнять алгоритм, не через sql в бд, а через таблицу слоёв - мне пока не ясно. Я с Python не дружу, но полагаю что он не должен быть сложнее sql
Прошу помочь советом/примером.
Re: Кнопка запускающая алгоритм
Добавлено: 27 апр 2019, 00:41
oldbay
А если ваш sql запрос выполнить таки из python при помощи psycopg2 ?
Код: Выделить всё
import psycopg2
connString = "
host='hostname'
port='5432'
dbname='db_name'
user='db_user'
password='db_user_pass'"
SQL="""
UPDATE \"Public\".buildings
SET fields1=CASE
WHEN ST_AREA(geom::geography)>500 THEN 1
WHEN ST_AREA(geom::geography)<500 THEN 0
"""
conn = psycopg2.connect(connString)
cur = conn.cursor()
cur.execute(SQL)
cur.commit()
cur.close()
conn.close()
Re: Кнопка запускающая алгоритм
Добавлено: 27 апр 2019, 08:23
Svility
oldbay писал(а): ↑27 апр 2019, 00:41
Я правильно понимаю что такой запрос должен срабатывать через "Консоль Python" в QGIS ?
Re: Кнопка запускающая алгоритм
Добавлено: 27 апр 2019, 15:57
nikost
А штатный калькулятор не?
IF ($area > 500, 1, 0)
Re: Кнопка запускающая алгоритм
Добавлено: 28 апр 2019, 08:16
Svility
nikost писал(а): ↑27 апр 2019, 15:57
А штатный калькулятор не?
IF ($area > 500, 1, 0)
Вышеописанных строк тысячи, а штатный калькулятор имеет ограничения. Поэтому не подходит
Re: Кнопка запускающая алгоритм
Добавлено: 28 апр 2019, 22:40
oldbay
Svility писал(а): ↑27 апр 2019, 08:23
Я правильно понимаю что такой запрос должен срабатывать через "Консоль Python" в QGIS ?
Вот не скажу. Это простейший скрипт на python для выполнения вашего запроса. Он требует установки пакета psycopg2 (
https://pypi.org/project/psycopg2/)