Этот вопрос основан на предыдущем вопросе, с которым я столкнулся на gis.stackexchange: как легко редактировать данные атрибутов с помощью регулярных выражений?
Возможно, кто-то может указать мне правильное направление?
У меня есть векторный шейп-файл контурных линий. В таблице атрибутов я уже преобразовал поле с именем FEET, состоящее из целочисленных данных, содержащих значения высот, в строковое поле с именем Label. Кроме того, я успешно добавил '' в конец строки, чтобы при пометке данных они читались как ноги.
Следующее, что я пытаюсь сделать, это вставить запятую между первыми двумя значениями строки, только если длина строки больше 4, или так, что запятая будет появляться только между тысячами и сотнями цифр в поле Label. Длина должна быть больше 4, потому что я также считаю '
Мой код до сих пор:
case when length( "Label") >4 then regexp_replace( "Label", '^([0-9])+([0-9]{3}\')$','$1 , $2') else "Label" end
однако функция regexp_replace, похоже, не принимает групповые переменные $ 1 $ 2 в 3-м параметре функции.
Я посмотрел на http://docs.python.org/2/library/re.html, поскольку регулярное выражение полевого калькулятора основано на том, что, как я понимаю, основано на использовании регулярных выражений в python, но я не смог понять это. Возможно, то, что я пытаюсь сделать, пока невозможно с этой функцией в полевом калькуляторе в QGIS 1.8 на Mac OSX. Или, скорее, мой синтаксис неправильный, так как я начинающий программист и немного новичок в регулярных выражениях.
источник
Ответы:
С помощью двух строковых функций в калькуляторе QGIS в версии 2.6 Mac OS XI смогла добиться этого. Вот шаги:
С помощью калькулятора полей создайте новое поле строкового типа с соответствующей шириной.
Запустите следующее выражение, чтобы установить значение поля:
concat( format_number( "Field_name" , 0) , '\'')
Это создало столбец со строкой, отформатированной так, как я хотел, например, число
2000
будет отформатировано2,000'
в конце,'
который обозначает ноги.источник
QGIS создал функцию, вызываемую
format_number
для решения этой проблемы. Вы просто делаете,format_number(12345,0)
чтобы получить12,345
.источник
'
к концу числа, чтобы обозначить «ноги». Сможете ли вы сделать следующее в QGIS с этой функцией?format_number(12345,0) + "'"
concat(tostring(format_number(12345,0)), "'")
. Вы должны были бы сначала превратить форматированное число в строку, используяtostring
функцию, а затем использоватьconcat
функцию, чтобы присоединить 'в конце.concat( format_number( "Field_name" , 0) , '\'')
Вы можете легко сделать группировку цифр в Python. Вот функция, которую я использовал, которую я нашел в StackOverflow:
источник
Для людей, чей язык не соответствует желаемому форматированию дисплея,
format_number
не является адекватным решением. Например, в моей французской системеformat_number(2000)
всегда отображается2 000
(с пробелом в виде разделителя тысяч) независимо от настроек языка QGIS, хотя иногда мне требуется отображение в английском стиле, например.2,000
,В таких случаях работает следующий (и несколько громоздкий) подход (по крайней мере, в QGIS 2.18):
Вы можете, конечно, заменить
','
любой разделитель тысяч, который вы хотите. Обратите внимание, что это выражение работает только с числами меньше 1 000 000.источник
В QGIS функция «format_number» в строковом меню калькулятора полей переформатирует числа для локализации определенных разделителей и десятичных разрядов.
источник
Это немного сложнее, чем в QGis. Согласно этой статье , вы должны создать собственное определение функции в Python, а затем импортировать его в QGis (это можно сделать автоматически при запуске). Это может показаться сложным, но вам нужно сделать это только один раз, и он всегда будет там!
Это функция, которую я использовал, основываясь на dmahr выше. Не уверен, как он работает со строками, так как я немного изменил код.
Затем вы сохраняете это в .qgis / python, импортируете файл в QGis с помощью консоли, после чего он будет отображаться в функциях «Python» в инструменте метки.
Выражение, которое я использовал: тысяч_кома ("[field_name]", ',')
источник
/Applications/QGIS.app/Contents/Resources/python/
?