Referindo-se a NaN ou ± ∞ (valores especiais de ponto flutuante) nas consultas de definição do ArcMap?


10

Por acaso, descobri como o ArcMap exibe valores especiais de ponto flutuante para o usuário.

  • + ∞ (infinito positivo) é exibido como 1.#INF
  • –∞ (infinito negativo) supostamente seria exibido como -1.#INF- não verifiquei este.
  • NaN (não um número) é exibido como alinhado à direita <Null>- não deve ser confundido com alinhado à esquerda <Null>, que indica NULL (valores ausentes):

    Captura de tela de uma tabela exibida no ArcMap que mostra dois tipos distintos de NULL

    ( Obter valores exclusivos na calculadora de campo não lista o NaN, a propósito.)

Mas não descobri como escrever consultas de definição de camada para selecionar linhas com base nesses valores especiais:

  • ColumnName IS NULL selecionará apenas valores NULL regulares, mas não NaN.
  • ColumnName = 1.#INF é rejeitado por ter sintaxe inválida.

Alguém sabe como fazer isso?


Trecho de código C # ArcObjects para armazenar um valor 1. # INF em um campo da tabela (conceito básico):

Como pedido. Como não estou mais no trabalho, o código a seguir não é o real que eu usei e não posso testá-lo agora, mas deve produzir o efeito mostrado na captura de tela acima:

ITable table = …;
int doubleFieldIndex = table.FindField(…);
IRow row = table.CreateRow(); 
row.Value[doubleFieldIndex] = double.PositiveInfinity;
row.Store();

Excelente pergunta. Eu não sabia que o NaN é representado como um <Null> alinhado à direita. Também estou ansioso pelas respostas. btw, o que faz a direita alinhado <null> olhar como na busca pela janela Atributo (Quando você começa todos os valores distintos para esse Field?)
Devdatta Tengshe

@Devdatta, até onde eu sei, obter valores exclusivos não lista NaN.
stakx

Que tipo de dados são esses? Esta é uma tabela de atributos de uma grade? Você importou esses dados de uma fonte não ArcGIS?
Jakub Sisak GeoGraphics

@ Jakub: Esta é uma tabela dentro de um geodatabase, e os campos mostrados na captura de tela têm o tipo Double. E não, a tabela foi criada e editada com um ArcObjects & ArcMap.
stakx

Sim, mas como você conseguiu esses valores nos campos?
whuber

Respostas:


2

No ArcGIS, um número de ponto flutuante de precisão única tem um intervalo de aproximadamente -3,4E38 a 1,2E38.

Se você estiver vendo os valores 1. # INF -1. # INF exibidos na tabela de atributos (ou através do MS Access ao analisar atributos) ou nas estatísticas da grade, esses números podem estar fora do intervalo suportado pela ESRI. E se esses números realmente ficarem fora do intervalo suportado, é seguro dizer que você não poderá consultar esses valores. Você pode tentar maior e menor que o máximo e o mínimo (-3.4E38 a 1.2E38) e ver o que ele retorna, mas duvido que a consulta funcione se a tabela / campo contiver um intervalo de valores não suportado.

Essa fonte sugere que esses valores podem ter sido importados de um aplicativo não ESRI de terceiros . Pode ser necessário converter os valores em um intervalo de valores suportado antes da importação para um produto ESRI.

Quanto aos valores NULL / NuN, seria útil saber exatamente o que estamos vendo no seu exemplo; Uma tabela de atribuição de uma grade, arquivo de shapefile, classe de recurso de banco de dados geográficos etc. Por exemplo, os shapefiles não podem armazenar valores NULL; portanto, se uma classe de recurso que contenha valores NULL é convertida em um shapefile, esses são armazenados como vários outros valores ("", 0, NuN ?, etc.), mas quando exibidos em uma tabela de atributos do ArcMap, ainda são representados visualmente como "<Null>". É possível que o alinhamento dos NULLs na sua tabela de atributos seja uma situação dessas. Estou apenas especulando sobre por que você pode consultar os NULLs alinhados à esquerda, mas não os NULLs à direita, mas se esse for um shapefile, tente importar em um geodatabase, execute a consulta novamente.As chances são de que tudo isso seja convertido em valores NULL apropriados.


@takx - Acabei de notar seus comentários acima. Não vi os comentários enquanto formulava minha resposta. Estou deixando aqui de qualquer maneira.
Jakub Sisak GeoGraphics

Na verdade, um shapefile é uma maneira plausível pela qual esses valores podem ocorrer. Com um shapefile, os números são mantidos no formato de caracteres ASCII de base 10, não como flutuadores binários ou duplos. Se o valor armazenado se converter em um infinito ou NaN, como o ArcGIS o interpretará? Provavelmente por capricho de quem codificou o leitor de shapefile (o que significa que o comportamento do ArcGIS pode mudar a qualquer momento, variando com a versão, o release e a correção de bugs atualmente em vigor :-).
whuber
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.