Нумерация объектов по значению семантики

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
Dezmond
Интересующийся
Сообщения: 42
Зарегистрирован: 03 ноя 2017, 11:33
Репутация: 1
Откуда: Москва

Нумерация объектов по значению семантики

Сообщение Dezmond » 22 апр 2019, 19:29

Добрый вечер коллеги! Примитивная задача, никак ответ на ум не приходит. Вообщем есть колонка в таблице, значения в которой имеют повторения. Как автоматически заполнить другую колонку цифрами по уникальности объектов?
Пример: все значения "Т" получат цифру 1, все значения "Ж" цифру 2 и тд...
Объединение по атрибутам с дальнейшей нумерацией не подходит, тк в таблице есть другие важные колонки с необходимой информацией.

UPDATE Вообщем решение такое:
Устанавливаем модуль Group States, который считает статистику по заданным полям. После чего эту статистику можно сохранить в csv. Потом обновляю ее row_number и по сцепке с исходным слоем добавляю нумерацию для уникальных объектов.
Последний раз редактировалось Dezmond 23 апр 2019, 14:04, всего редактировалось 1 раз.

Dmitry Stasev
Участник
Сообщения: 67
Зарегистрирован: 13 мар 2018, 08:59
Репутация: 22
Откуда: MO

Re: Нумерация объектов по значению семантики

Сообщение Dmitry Stasev » 22 апр 2019, 21:19

- Если нужны просто цифры
- Если буква одна
Может этого достаточно:
Простую пользовательскую функцию в калькулятор подсунуть

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

from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def ord0(value1, feature, parent):
    """ Add some text here for documenting the function """
    return ord(value1[0])

Dezmond
Интересующийся
Сообщения: 42
Зарегистрирован: 03 ноя 2017, 11:33
Репутация: 1
Откуда: Москва

Re: Нумерация объектов по значению семантики

Сообщение Dezmond » 23 апр 2019, 10:08

1. да нужны просто цифры.
2. Буква не одна, в полной задаче, это сцепка из нескольких полей.

Dmitry Stasev
Участник
Сообщения: 67
Зарегистрирован: 13 мар 2018, 08:59
Репутация: 22
Откуда: MO

Re: Нумерация объектов по значению семантики

Сообщение Dmitry Stasev » 23 апр 2019, 10:15

Dezmond писал(а):
23 апр 2019, 10:08
Буква не одна, в полной задаче, это сцепка из нескольких полей.
Если комбинации предопределены заранее, можно словарик сделать и из него брать ID по ключу

Dmitry Stasev
Участник
Сообщения: 67
Зарегистрирован: 13 мар 2018, 08:59
Репутация: 22
Откуда: MO

Re: Нумерация объектов по значению семантики

Сообщение Dmitry Stasev » 23 апр 2019, 10:18

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

# -*- coding: utf-8 -*-
from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def idd(value1, feature, parent):
    """ Add some text here for documenting the function """
    dct = {u'А':1,u'Бб':2,u'Ввв':3,u'ГД':4}
    return dct.get(value1)

Dezmond
Интересующийся
Сообщения: 42
Зарегистрирован: 03 ноя 2017, 11:33
Репутация: 1
Откуда: Москва

Re: Нумерация объектов по значению семантики

Сообщение Dezmond » 23 апр 2019, 11:01

сейчас мой код выглядит так

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

case 
when "код"='Т' then '1'
when "код"='Ж' then '2'
when "код"='МФ' then '3'
end 
Обобщающая примерно так

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

case
  when "код" = 'first group name' then '1'
  when "код" = 'second group name' then '2' 
  when "код" = 'third group name' then '3' 
end
но все равно в ней нет автоматизации....
Извините за глупый вопрос, Ваш код подходит для калькулятора полей? немного не пойму :?

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

Re: Нумерация объектов по значению семантики

Сообщение trir » 23 апр 2019, 11:09

но все равно в ней нет автоматизации....
потому что надо использовать реляционые БД и SQL

Dezmond
Интересующийся
Сообщения: 42
Зарегистрирован: 03 ноя 2017, 11:33
Репутация: 1
Откуда: Москва

Re: Нумерация объектов по значению семантики

Сообщение Dezmond » 23 апр 2019, 11:13

сейчас все в postgres, но работаю я в qgis, тк это удобнее

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

Re: Нумерация объектов по значению семантики

Сообщение trir » 23 апр 2019, 11:14

сейчас все в postgres
так просто сделай представление - и внём подставь значения

Dmitry Stasev
Участник
Сообщения: 67
Зарегистрирован: 13 мар 2018, 08:59
Репутация: 22
Откуда: MO

Re: Нумерация объектов по значению семантики

Сообщение Dmitry Stasev » 23 апр 2019, 13:35

Dmitry Stasev писал(а):
22 апр 2019, 21:19
пользовательскую функцию в калькулятор подсунуть
В Калькуляторе есть редактор функций, делаете свою, загружаете, потом используете в выражении

Dezmond
Интересующийся
Сообщения: 42
Зарегистрирован: 03 ноя 2017, 11:33
Репутация: 1
Откуда: Москва

Re: Нумерация объектов по значению семантики

Сообщение Dezmond » 23 апр 2019, 14:07

в шапке обновил, свое решение задачи. Для калькулятора полей, нужно все значения туда подсунуть, а их не мало.

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

Re: Нумерация объектов по значению семантики

Сообщение trir » 23 апр 2019, 14:11

так это можно сразу в БД делать без лишних движений

Dezmond
Интересующийся
Сообщения: 42
Зарегистрирован: 03 ноя 2017, 11:33
Репутация: 1
Откуда: Москва

Re: Нумерация объектов по значению семантики

Сообщение Dezmond » 23 апр 2019, 15:19

trir писал(а):
23 апр 2019, 14:11
так это можно сразу в БД делать без лишних движений
Дело привычки наверное... Я до сих пор не настроил что бы к БД можно было с рабочей станции подключаться. Приходится физически за сервер садится.

Dmitry Stasev
Участник
Сообщения: 67
Зарегистрирован: 13 мар 2018, 08:59
Репутация: 22
Откуда: MO

Re: Нумерация объектов по значению семантики

Сообщение Dmitry Stasev » 23 апр 2019, 15:58

trir писал(а):
23 апр 2019, 14:11
так это можно сразу в БД делать без лишних движений
Поддерживаю.
Или хотя бы виртуальный слой:

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

with cte as (
    select a.rowid as myId, a.myName from myTable a group by a.myName 
)
select b.*, cte.myId 
from myTable b
join cte on cte.myName = b.myName

Ответить

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

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

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