У меня есть Contour Featureclass, с интервалом 0,2 метра. Я хочу выбрать только те контуры, которые с интервалом 1 м?
Я попытался использовать следующий синтаксис в диалоговом окне «Выбор по атрибуту» (в ArcMap), но он выбирает все контуры:
Mod("ELEVATION", 1)=0
Какой запрос я должен выполнить?
arcgis-desktop
sql
select-by-attribute
contour
Девдатта Тенгше
источник
источник
Ответы:
Простой способ выбрать только целочисленные значения - использовать следующий синтаксис:
Mod(Round("ELEVATION", 0)*10, 10)=0
Это умножение на 10 делает все значения целыми, а затем мы выбираем только те, которые кратны 10.
Если вы хотите выбрать Multiples какого-либо другого числа, просто умножьте 10 на интервал.
Для получения контуров с интервалом 5 м используйте:
Mod(Round("ELEVATION",0) * 10, 50)=0
Для получения контуров с интервалом 100 м используйте:
Mod(Round("ELEVATION", 0) * 10, 1000)=0
Обновление
В соответствии с рекомендацией Whuber, приведенной в комментарии ниже, я добавил функцию округления в выражение запроса.
источник
MOD
будет возникать ошибка округления с плавающей запятой - и это важно здесь: если у вас низкий даже хотя бы самый младший разряд, онMOD
может вернуть неправильное значение (в зависимости от того, как оно реализовано). Я хотел бы предложить округлить значения перед применениемMOD
в качестве способа предотвращения этих тонких (и коварных) ошибок.ROUND
чтобы добиться большей точности при округлении.Вот еще один вариант запроса. Он в значительной степени делает то же самое, что и ответы, перечисленные выше, но (на мой взгляд) немного легче настроить для различных сценариев.
Для отображения любого контура делится на 10
Для отображения любого контура делится на 50
Для отображения полметровых контуров
Для отображения 10-метровых контуров с произвольным смещением (например, 10.2, 20.2, 30.2)
В конце концов, это просто еще один вариант для рассмотрения.
источник
Это должно было быть комментарием к вышеуказанному ответу - извините .
Синтаксис может варьироваться в зависимости от типа БД, в которой хранятся ваши контуры, но данное решение, кажется, выбирает контуры после округления их значений. Так, например, в моем тесте был достигнут выбранный набор, который включал 0,3 м и 0,4 м. На самом деле это не исключало ни одно из значений.
Это уравнение
Mod(Round("ELEVATION" * 10, 0), 2)=0
Дали мне результаты, которые, казалось, соответствовали тому, что спрашивал спрашивающий.
источник
Чтобы получить контуры индекса, я использую это на калькуляторе поля:
В ARCMAP
Введите «c» (без кавычек) в поле ввода текста в нижней части диалогового окна и нажмите кнопку «ОК».
В QGIS
"" level "" Установить в поле высоты контура "200" Установить в интервале контуров индекса
Тогда: «1» является контуром индекса, а «0» не является контуром индекса
источник
Умножьте контур на 10, а затем модуль на 10, чтобы определить, есть ли остаток. Если нет остатка, чем целое число, иначе это число с плавающей точкой.
источник