Страница 1 из 1
					
				Нумерация объектов по значению семантики
				Добавлено: 22 апр 2019, 19:29
				 Dezmond
				Добрый вечер коллеги! Примитивная задача, никак ответ на ум не приходит. Вообщем есть колонка в таблице, значения в которой имеют повторения. Как автоматически заполнить другую колонку цифрами по уникальности объектов?
Пример: все значения "Т" получат цифру 1, все значения "Ж" цифру 2 и тд...
Объединение по атрибутам с дальнейшей нумерацией не подходит, тк в таблице есть другие важные колонки с необходимой информацией.
UPDATE Вообщем решение такое:
Устанавливаем модуль Group States, который считает статистику по заданным полям. После чего эту статистику можно сохранить в csv. Потом обновляю ее row_number и по сцепке с исходным слоем добавляю нумерацию для уникальных объектов.
			 
			
					
				Re: Нумерация объектов по значению семантики
				Добавлено: 22 апр 2019, 21:19
				 Dmitry Stasev
				- Если нужны просто цифры
- Если буква одна
Может этого достаточно:
Простую пользовательскую функцию в калькулятор подсунуть
Код: Выделить всё
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])
 
			
					
				Re: Нумерация объектов по значению семантики
				Добавлено: 23 апр 2019, 10:08
				 Dezmond
				1. да нужны просто цифры.
2. Буква не одна, в полной задаче, это сцепка из нескольких полей.
			 
			
					
				Re: Нумерация объектов по значению семантики
				Добавлено: 23 апр 2019, 10:15
				 Dmitry Stasev
				Dezmond писал(а): ↑23 апр 2019, 10:08Буква не одна, в полной задаче, это сцепка из нескольких полей.
 
Если комбинации предопределены заранее, можно словарик сделать и из него брать ID по ключу
 
			
					
				Re: Нумерация объектов по значению семантики
				Добавлено: 23 апр 2019, 10:18
				 Dmitry Stasev
				Код: Выделить всё
# -*- 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)
 
			
					
				Re: Нумерация объектов по значению семантики
				Добавлено: 23 апр 2019, 11:01
				 Dezmond
				сейчас мой код выглядит так
Код: Выделить всё
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
но все равно в ней нет автоматизации....
Извините за глупый вопрос, Ваш код подходит для калькулятора полей? немного не пойму 

 
			
					
				Re: Нумерация объектов по значению семантики
				Добавлено: 23 апр 2019, 11:09
				 trir
				но все равно в ней нет автоматизации....
потому что надо использовать реляционые БД и SQL
 
			
					
				Re: Нумерация объектов по значению семантики
				Добавлено: 23 апр 2019, 11:13
				 Dezmond
				сейчас все в postgres, но работаю я в qgis, тк это удобнее
			 
			
					
				Re: Нумерация объектов по значению семантики
				Добавлено: 23 апр 2019, 11:14
				 trir
				сейчас все в postgres
так просто сделай 
представление - и внём подставь значения
 
			
					
				Re: Нумерация объектов по значению семантики
				Добавлено: 23 апр 2019, 13:35
				 Dmitry Stasev
				Dmitry Stasev писал(а): ↑22 апр 2019, 21:19пользовательскую функцию в калькулятор подсунуть
 
В Калькуляторе есть редактор функций, делаете свою, загружаете, потом используете в выражении
 
			
					
				Re: Нумерация объектов по значению семантики
				Добавлено: 23 апр 2019, 14:07
				 Dezmond
				в шапке обновил, свое решение задачи. Для калькулятора полей, нужно все значения туда подсунуть, а их не мало.
			 
			
					
				Re: Нумерация объектов по значению семантики
				Добавлено: 23 апр 2019, 14:11
				 trir
				так это можно сразу в БД делать без лишних движений
			 
			
					
				Re: Нумерация объектов по значению семантики
				Добавлено: 23 апр 2019, 15:19
				 Dezmond
				trir писал(а): ↑23 апр 2019, 14:11так это можно сразу в БД делать без лишних движений
 
Дело привычки наверное... Я до сих пор не настроил что бы к БД можно было с рабочей станции подключаться. Приходится физически за сервер садится.
 
			
					
				Re: Нумерация объектов по значению семантики
				Добавлено: 23 апр 2019, 15:58
				 Dmitry Stasev
				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