Страница 1 из 2

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

Добавлено: 04 июн 2016, 11:22
KartaBY
Продолжим... :D

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

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

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

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

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

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

Добавлено: 08 июн 2016, 08:32
KartaBY
Судя по дружному молчанию данная задача решения не имеет. :-(

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

Добавлено: 08 июн 2016, 08:58
trir
"ежик мучился, но лез на кактус"
это всё решается на уровне БД

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". Так?

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

Добавлено: 08 июн 2016, 09:47
KartaBY
Да. Именно так. Поля разные. Строка одна.

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

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

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

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

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

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

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

Добавлено: 08 июн 2016, 10:59
trir
ничего сложного в SQL нет, зато он очень упрощает работу с данными
сейчас вся документация в сети, есть куча учебников

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

Под Linux - PostGIS, MySQL

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

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

Всё понятно?

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

Добавлено: 08 июн 2016, 14:36
KartaBY
Попробовал с функциями. Не очень у меня получается, а точнее ничего не получилось.
С программированием я как обезьяна с гранатой.
ScreenShot009.jpg
ScreenShot009.jpg (267.79 КБ) 10985 просмотров
ScreenShot010.jpg
ScreenShot010.jpg (194.46 КБ) 10985 просмотров

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

Добавлено: 08 июн 2016, 16:23
Denis Rykov
Пример слоя можно с парой записей?

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

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

import re

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

Добавлено: 09 июн 2016, 13:38
KartaBY
Увы. не помогло и то что я пропустил.

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

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

Добавлено: 09 июн 2016, 14:44
Denis Rykov
Немного поправил код функции, обновлённый вариант:

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

@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

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

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