Регулярное выражение в параметрах подписей 2

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
KartaBY
Активный участник
Сообщения: 101
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 6

Регулярное выражение в параметрах подписей 2

Сообщение KartaBY » 04 июн 2016, 11:22

Продолжим... :D

Для вывода необходимой информации фильтрую необходимые строки следующим выражением:

Код: Выделить всё

"RSTR1"   ILIKE  'Special Speed Situation:%'
Все работает прекрасно, но ....
у меня атрибутивное поле "RSTR1" может иметь разные имена для этого используется добавочный номер вплоть до 32 ("RSTR1_32" ) и так до "RSTR32_32".
Атрибутивных полей может быть от "ни одного" до ... очень много. Поля могут присутствовать все одновременно. И номера могут иметь произвольную нумерацию.

Собственно, перепробовал разные варианты прописать регулярные выражение для перебора атрибутивных полей. Ничего не получилось.
Прошу помощи у сообщества.

QGIS 2.14.2
ScreenShot008.jpg
ScreenShot008.jpg (132.05 КБ) 10248 просмотров

KartaBY
Активный участник
Сообщения: 101
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 6

Re: Регулярное выражение в параметрах подписей 2

Сообщение KartaBY » 08 июн 2016, 08:32

Судя по дружному молчанию данная задача решения не имеет. :-(

trir
Гуру
Сообщения: 5278
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1014
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Регулярное выражение в параметрах подписей 2

Сообщение trir » 08 июн 2016, 08:58

"ежик мучился, но лез на кактус"
это всё решается на уровне БД

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

Re: Регулярное выражение в параметрах подписей 2

Сообщение Александр Мурый » 08 июн 2016, 09:34

Как я понял, вам нужен запрос в фильтре типа

Код: Выделить всё

"RSTR1"  ILIKE 'Special Speed Situation:%'  OR  "RSTR1_2" ILIKE 'Special Speed Situation:%'  OR "RSTR32_32" ILIKE 'Special Speed Situation:%'  
, только с автоматическим указанием всех имеющихся полей типа "RSTR1". Так?
Редактор материалов, модератор форума

KartaBY
Активный участник
Сообщения: 101
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 6

Re: Регулярное выражение в параметрах подписей 2

Сообщение KartaBY » 08 июн 2016, 09:47

Да. Именно так. Поля разные. Строка одна.

KartaBY
Активный участник
Сообщения: 101
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 6

Re: Регулярное выражение в параметрах подписей 2

Сообщение KartaBY » 08 июн 2016, 09:50

trir писал(а):"ежик мучился, но лез на кактус"
это всё решается на уровне БД
Увы. Перегонять шейп в БД мне крайне неудобно, да и незачем.
Мне необходимо получить визуальную картинку для оценки правильности заполнения атрибутов дорог.
А этих атрибутов очень много и информация очень разнообразная.

trir
Гуру
Сообщения: 5278
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1014
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Регулярное выражение в параметрах подписей 2

Сообщение trir » 08 июн 2016, 10:14

для оценки правильности заполнения атрибутов дорог
SQL очень в этом помогает, я обычно делаю несколько представлений, в таком случае

KartaBY
Активный участник
Сообщения: 101
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 6

Re: Регулярное выражение в параметрах подписей 2

Сообщение KartaBY » 08 июн 2016, 10:36

Возможно так и есть как вы говорите, но мне бы справиться с QGIS.
Для работы в SQL у меня нет ни соответствующих знаний ни опыта.
Хотя, идея с БД у меня давно витает в голове.

trir
Гуру
Сообщения: 5278
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1014
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Регулярное выражение в параметрах подписей 2

Сообщение trir » 08 июн 2016, 10:59

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

Под Windows
1. Поставить MS SQL Server Express
2. Поставить MS SQL Server Management Studio Express
3. Загрузка данных

Под Linux - PostGIS, MySQL

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Регулярное выражение в параметрах подписей 2

Сообщение Denis Rykov » 08 июн 2016, 11:05

1. Нажимаем на ...
2. В открывшемся окне переходим во вкладку Function Editor и пишем 2 функции: fvals и rstr, которая потом будет использоваться в QGIS
3. После этого нажимаем Load
4. В выражении для фильтра пишем rstr('Special Speed Situation')

Всё понятно?
Вложения
qgis-label-filter01.png
qgis-label-filter01.png (91.79 КБ) 10120 просмотров
Spatial is now, more than ever, just another column- The Geometry Column.

KartaBY
Активный участник
Сообщения: 101
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 6

Re: Регулярное выражение в параметрах подписей 2

Сообщение KartaBY » 08 июн 2016, 14:36

Попробовал с функциями. Не очень у меня получается, а точнее ничего не получилось.
С программированием я как обезьяна с гранатой.
ScreenShot009.jpg
ScreenShot009.jpg (267.79 КБ) 10069 просмотров
ScreenShot010.jpg
ScreenShot010.jpg (194.46 КБ) 10069 просмотров

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Регулярное выражение в параметрах подписей 2

Сообщение Denis Rykov » 08 июн 2016, 16:23

Пример слоя можно с парой записей?

UPD.: Похоже, вы просто забыли написать (6-я строка в моём примере):

Код: Выделить всё

import re
Spatial is now, more than ever, just another column- The Geometry Column.

KartaBY
Активный участник
Сообщения: 101
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 6

Re: Регулярное выражение в параметрах подписей 2

Сообщение KartaBY » 09 июн 2016, 13:38

Увы. не помогло и то что я пропустил.

Прикладываю фрагмент карты.
roads.zip
(6.91 КБ) 381 скачивание

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Регулярное выражение в параметрах подписей 2

Сообщение Denis Rykov » 09 июн 2016, 14:44

Немного поправил код функции, обновлённый вариант:

Код: Выделить всё

@qgsfunction(args='auto', group='KartaBY')
def rstr(value1, feature, parent):
	pattern = r'^RSTR([1-9]|1[0-9]|2[0-9]|3[0-2])(_([1-9]|1[0-9]|2[0-9]|3[0-2]))?$'
	for name, value in fvals(feature):
	    if value != NULL:
		    if (re.match(pattern, name) and
		        value1.lower() in value.lower()):
			    return True
Spatial is now, more than ever, just another column- The Geometry Column.

KartaBY
Активный участник
Сообщения: 101
Зарегистрирован: 16 июл 2011, 09:15
Репутация: 6

Re: Регулярное выражение в параметрах подписей 2

Сообщение KartaBY » 09 июн 2016, 15:59

Я конечно этот код введу, но хотелось бы понять что есть что в этой функции.
Может если разберусь то и сам смогу аналогичные функции писать.
Если не тяжело. Поясните пожалуйста.
Я не такой уже и дуб в программировании, но как это работает в QGIS для меня сродни магии.

Ответить

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

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

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