Facendo riferimento a NaN o ± ∞ (valori speciali in virgola mobile) nelle query di definizione di ArcMap?


10

Per caso ho scoperto come ArcMap mostra all'utente speciali valori in virgola mobile.

  • + ∞ (infinito positivo) viene visualizzato come 1.#INF
  • –∞ (infinito negativo) verrebbe visualizzato come -1.#INF- Non ho verificato questo.
  • NaN (non un numero) viene visualizzato come allineato a destra <Null>- da non confondere con l'allineamento a sinistra <Null>, che indica NULL (valori mancanti):

    Schermata di una tabella visualizzata in ArcMap che mostra due tipi distinti di NULL

    (A proposito, ottieni valori univoci nel calcolatore di campo non elenca affatto NaN.)

Ma non ho scoperto come scrivere query di definizione layer per selezionare le righe in base a questi valori speciali:

  • ColumnName IS NULL selezionerà solo i normali valori NULL, ma non NaN.
  • ColumnName = 1.#INF viene rifiutato come sintassi non valida.

Qualcuno sa come fare questo?


Snippet di codice C # ArcObjects per la memorizzazione di un valore INF # # in un campo tabella (concetto di base):

Come richiesto. Dal momento che non sono più al lavoro, il seguente non è il codice reale che ho usato e non posso provarlo in questo momento, ma dovrebbe produrre l'effetto mostrato nello screenshot sopra:

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

Ottima domanda Non sapevo che NaN fosse rappresentato come <Null> allineato a destra. Anch'io aspetto le risposte. tra l'altro, che aspetto ha il <null> allineato a destra nella finestra Cerca per attributo (Quando ottieni tutti i valori distinti per quel campo?)
Devdatta Tengshe

@Devdatta, per quanto ne so, Ottieni valori univoci non elenca affatto NaN.
stakx,

Che tipo di dati è questo? È una tabella di attributi di una griglia? Hai importato questi dati da una fonte non ArcGIS?
Jakub Sisak GeoGraphics,

@Jakub: questa è una tabella all'interno di un file geodatabase e i campi mostrati nello screenshot hanno il tipo Double. E no, la tabella è stata creata e modificata con ArcObjects e ArcMap.
stakx,

Sì, ma come hai ottenuto tali valori nei campi?
whuber

Risposte:


2

In ArcGIS un numero a virgola mobile a precisione singola ha un intervallo da circa -3,4 E38 a 1,2 E38.

Se in realtà stai visualizzando i valori 1. # INF -1. # INF visualizzati nella tabella degli attributi (o tramite MS Access durante l'analisi degli attributi) o le statistiche della griglia, questi potrebbero essere numeri che non rientrano nell'intervallo supportato da ESRI. E se questo numero in realtà non rientra nell'intervallo supportato, è sicuro affermare che non sarà possibile eseguire una query per questi valori. Potresti provare di più e meno del massimo e del minimo (da -3,4E38 a 1,2E38) e vedere cosa restituisce, ma sono dubbioso che la query funzionerà affatto se la tabella / campo contiene un intervallo di valori non distorto.

Questa fonte suggerisce che tali valori potrebbero essere stati importati da un'applicazione non ESRI di terze parti . Potrebbe essere necessario convertire i valori in un intervallo di valori supportato prima di importare in un prodotto ESRI.

Per quanto riguarda i valori NULL / NuN, sarebbe utile sapere esattamente cosa stiamo guardando nel tuo esempio; Una tabella attrubute di una griglia, uno shapefile, una classe di caratteristiche geodatabase, ecc. Ad esempio, gli shapefile non possono archiviare valori NULL, quindi se una classe di funzionalità thant contiene valori NULL viene convertita in uno shapefile, questi vengono memorizzati come vari altri valori ("", 0, NuN ?, ecc.) Ma quando visualizzati in una tabella degli attributi ArcMap sono ancora visivamente rappresentati come "<Null>". È possibile che l'allineamento dei NULL nella tabella degli attributi sia una situazione del genere. Sto solo ipotizzando il motivo per cui sei in grado di interrogare i NULL allineati a sinistra ma non i NULL allineati a destra, ma se si tratta di un file di forma, prova a importare in un geodatabase quindi eseguire nuovamente la query. È probabile che tutti questi vengano convertiti in valori NULL corretti.


@stakx - Ho appena notato i tuoi commenti sopra. Non ho visto i commenti mentre stavo formulando la mia risposta. Lo lascio qui comunque.
Jakub Sisak GeoGraphics,

In realtà, uno shapefile è un modo plausibile in cui tali valori potrebbero verificarsi. Con uno shapefile, i numeri vengono mantenuti nel formato di caratteri ASCII in base 10, non come float binari o doppi. Se il valore memorizzato viene convertito in infinito o NaN, come lo interpreterà ArcGIS? Probabilmente per capriccio di chiunque abbia codificato il lettore shapefile (il che significa che il comportamento di ArcGIS potrebbe cambiare in qualsiasi momento, variando con la versione, il rilascio e la correzione dei bug attualmente in vigore :-).
whuber
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.