Eu tenho uma classe Featureclass, com um intervalo de 0,2 metros. Desejo selecionar apenas os contornos, que estão no intervalo de 1 m?
Tentei usar a seguinte sintaxe na caixa de diálogo 'Selecionar por atributo' (no ArcMap), mas ela seleciona todos os contornos:
Mod("ELEVATION", 1)=0
Que consulta devo executar?
arcgis-desktop
sql
select-by-attribute
contour
Devdatta Tengshe
fonte
fonte
Respostas:
O truque simples para selecionar apenas valores inteiros é usar a seguinte sintaxe:
Mod(Round("ELEVATION", 0)*10, 10)=0
Essa multiplicação por 10 torna todos os valores Inteiros e, em seguida, selecionamos apenas aqueles que são múltiplos de 10.
Caso deseje selecionar Múltiplos de algum outro número, basta multiplicar 10 pelo intervalo.
Para obter contornos em intervalos de 5 m, use:
Mod(Round("ELEVATION",0) * 10, 50)=0
Para obter contornos em um intervalo de 100 m, use:
Mod(Round("ELEVATION", 0) * 10, 1000)=0
Atualização
Conforme o conselho de Whuber fornecido no comentário abaixo, eu adicionei a função de arredondamento na expressão de consulta.
fonte
MOD
, estará sujeito a um erro de arredondamento de ponto flutuante - e isso é fundamental aqui: se você estiver com um valor muito baixo, mesmo pelo dígito menos significativo,MOD
poderá retornar o valor errado (dependendo de como ele é implementado). Gostaria de sugerir o arredondamento dos valores antes de aplicarMOD
como forma de impedir esses erros sutis (e insidiosos).ROUND
para obter mais precisão no arredondamento.Aqui está outra opção de consulta. Em grande parte, faz o mesmo que as respostas listadas acima, mas é (na minha opinião) um pouco mais fácil de personalizar para diferentes cenários.
Para exibir qualquer contorno divisível por 10
Para exibir qualquer contorno divisível por 50
Para exibir contornos de meio metro
Para exibir contornos de 10 metros com um deslocamento arbitrário (por exemplo, 10.2, 20.2, 30.2)
No final do dia, essa é apenas outra opção a considerar.
fonte
Isso deveria ser um comentário sobre a resposta acima - desculpe .
A sintaxe varia de acordo com o tipo de banco de dados em que seus contornos estão armazenados, mas a solução fornecida parece escolher contornos após arredondar seus valores. Por exemplo, no meu teste, isso alcançou um conjunto selecionado que incluía 0,3 m e 0,4 m. De fato, não excluiu nenhum dos valores.
Esta equação
Mod(Round("ELEVATION" * 10, 0), 2)=0
Deu-me resultados que pareciam coincidir com o que o questionador estava perguntando.
fonte
Para obter contornos de índice, eu uso isso na calculadora de campo:
No ARCMAP
'Digite "c" (sem aspas) no campo de entrada de texto na parte inferior da caixa de diálogo e clique em OK.
No QGIS
"" level "" Defina para o campo de altura do contorno "200" Defina para o intervalo dos contornos do índice
Então: "1" é um contorno de índice e "0" não é um contorno de índice
fonte
Multiplique o contorno por 10 e, em seguida, o módulo por 10 para determinar se há um restante. Se não houver resto, é um número inteiro; caso contrário, é flutuante.
fonte