QGIS: форматирование строки при создании виртуального поля
Я хотел бы присоединить оценки населения переписи США с границами округов .
Оценки численности населения слой ( co-est2019-alldata
) содержит STATE
и COUNTY
поле с состоянием и округом FIPS коды, как это:
ШТАТ | ОКРУГ |
---|---|
36 | 51 |
1 | 15 |
cb_2018_us_county_5m
Слой county boundary ( ) содержит те же значения, но с немного другим форматированием, а также GEOID
строковое поле, которое объединяет два:
СТАТЕФП | COUNTYFP | ГЕОИД |
---|---|---|
36 | 051 | 36051 |
01 | 015 | 01015 |
QGIS не поддерживает объединение нескольких полей , но обычно обходным путем является создание нового виртуального поля, которое объединяет целевые атрибуты. Я хочу создать виртуальное поле в слое населения, которое соответствует GEOID
полю в пограничном слое округа.
Это было бы просто, если бы существовала функция, эквивалентная sprintf
, потому что тогда я мог бы просто написать:
sprintf('%02s%03s', "STATE", "COUNTY")
... но, насколько я могу судить, такой функции не существует. Как лучше всего с этим справиться?
Ответы
Попробуй это :
lpad(to_string("STATE"), 2, '0') || lpad(to_string("COUNTY"), 3, '0')
возвращается
если "STATE"
= 1
и "COUNTY"
= 15
: 01015
если "STATE"
= 22
и "COUNTY"
= 5
:22005
Из документации:
LPAD (
string
,width
,fill
) ( документ ):Возвращает строку, дополненную слева до указанной ширины, используя символ заполнения. Если целевая ширина меньше длины строки, строка усекается.
to_string (
number
) ( doc ): (потому что я не был уверен, что ваши поля были символами)Преобразует число в строку.
|| : объединить две строки