Страница 1 из 2
Регулярное выражение в параметрах подписей 2
Добавлено: 04 июн 2016, 11:22
KartaBY
Продолжим...
Для вывода необходимой информации фильтрую необходимые строки следующим выражением:
Все работает прекрасно, но ....
у меня атрибутивное поле "RSTR1" может иметь разные имена для этого используется добавочный номер вплоть до 32 ("RSTR1_32" ) и так до "RSTR32_32".
Атрибутивных полей может быть от "ни одного" до ... очень много. Поля могут присутствовать все одновременно. И номера могут иметь произвольную нумерацию.
Собственно, перепробовал разные варианты прописать регулярные выражение для перебора атрибутивных полей. Ничего не получилось.
Прошу помощи у сообщества.
QGIS 2.14.2

- 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
Увы. Перегонять шейп в БД мне крайне неудобно, да и незачем.
Мне необходимо получить визуальную картинку для оценки правильности заполнения атрибутов дорог.
А этих атрибутов очень много и информация очень разнообразная.
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 (267.79 КБ) 10985 просмотров

- ScreenShot010.jpg (194.46 КБ) 10985 просмотров
Re: Регулярное выражение в параметрах подписей 2
Добавлено: 08 июн 2016, 16:23
Denis Rykov
Пример слоя можно с парой записей?
UPD.: Похоже, вы просто забыли написать (6-я строка в моём примере):
Re: Регулярное выражение в параметрах подписей 2
Добавлено: 09 июн 2016, 13:38
KartaBY
Увы. не помогло и то что я пропустил.
Прикладываю фрагмент карты.
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 для меня сродни магии.