Я придумал следующее выражение для преобразования 5.1234 в 5 ° 7`24.24 "
toint ($ x) || '°' || toint ((($ x) - toint ($ x)) * 60) || '`' || substr ((tostring (((($ x) - toint ($ x)) * 60) - toint ((($ x) - toint ($ x)) * 60)) * 60), 1,5) || «"»
Вот проблема: для некоторых пунктов, таких как 5.1234, это работает. но для других это не так. Я подозреваю, что проблема заключается в целочисленном преобразовании, которое округляет десятичные числа, а не усекает их.
Есть ли другой вариант? Спасибо.
qgis
latitude-longitude
calculator
Obsidianz
источник
источник
Ответы:
Мне нравится выражение, которое вы собрали - возможно, нет решения в QGIS 1.8, но в QGIS 1.9-dev есть
floor()
функция округления, которая округляет вниз . Для D ° M'S '':Обратите внимание на сбежавший апостроф (
\'
).Для D ° M.MMM ':
Чтобы ограничить количество отображаемых десятичных минут, замените # в приведенном ниже выражении количеством цифр:
источник
Оператор по модулю может использоваться для усечения, но полученное выражение будет очень уродливым. Лучше использовать подстановку строк, но, к сожалению, QGIS не предоставляет никаких strpos или подобных функций. Используйте,
regexp_replace($x, '\\..*', '')
чтобы получить всю часть иregexp_replace($x, '^[0-9]*\\.', '')
получить десятичную часть. Используйтеtoreal
вместоtoint
расчетов со вторым выражением, чтобы убедиться, что округления не будет.источник