Vous vous référez à NaN ou ± ∞ (valeurs à virgule flottante spéciales) dans les requêtes de définition ArcMap?


10

J'ai découvert par hasard comment ArcMap affiche des valeurs à virgule flottante spéciales pour l'utilisateur.

  • + ∞ (infini positif) s'affiche comme 1.#INF
  • –∞ (infini négatif) serait censé être affiché comme -1.#INF- je n'ai pas vérifié celui-ci.
  • NaN (pas un nombre) est affiché comme aligné à droite <Null>- à ne pas confondre avec aligné à gauche <Null>, ce qui indique NULL (valeurs manquantes):

    Capture d'écran d'une table affichée dans ArcMap qui montre deux types distincts de NULL

    ( Soit dit en passant, obtenir des valeurs uniques dans le calculateur de champ ne répertorie pas du tout NaN.)

Mais je n'ai pas découvert comment écrire des requêtes de définition de couche pour sélectionner des lignes en fonction de ces valeurs spéciales:

  • ColumnName IS NULL sélectionnera uniquement des valeurs NULL régulières, mais non NaN.
  • ColumnName = 1.#INF est rejeté comme ayant une syntaxe non valide.

Est-ce que quelqu'un sait comment faire ça?


Extrait de code C # ArcObjects pour stocker une valeur 1. # INF dans un champ de table (concept de base):

Comme demandé. Comme je ne suis plus au travail, ce qui suit n'est pas le vrai code que j'ai utilisé et je ne peux pas le tester pour le moment, mais cela devrait produire l'effet indiqué dans la capture d'écran ci-dessus:

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

Excellente question. Je ne savais pas que NaN est représenté comme un <Null> aligné à droite. Moi aussi, j'attends avec impatience les réponses. btw, à quoi ressemble le <null> aligné à droite dans la fenêtre Recherche par attribut (lorsque vous obtenez toutes les valeurs distinctes pour ce champ?)
Devdatta Tengshe

@Devdatta, pour autant que je sache, Obtenir des valeurs uniques ne répertorie pas du tout NaN.
stakx

De quel type de données s'agit-il? S'agit-il d'une table attributaire d'une grille? Avez-vous importé ces données à partir d'une source non ArcGIS?
Jakub Sisak GeoGraphics

@Jakub: Il s'agit d'un tableau à l'intérieur d'une géodatabase fichier et les champs affichés dans la capture d'écran ont le type Double. Et non, le tableau a été créé et modifié avec un ArcObjects & ArcMap.
stakx

Oui, mais comment avez-vous obtenu ces valeurs dans les champs?
whuber

Réponses:


2

Dans ArcGIS, un nombre à virgule flottante simple précision a une plage d'environ -3,4E38 à 1,2E38.

Si vous voyez réellement les valeurs 1. # INF -1. # INF affichées dans votre table d'attributs (ou via MS Access lors de l'analyse des attributs) ou les statistiques de la grille, il peut s'agir de nombres qui se situent en dehors de la plage prise en charge par ESRI. Et si ces nombres tombent en fait en dehors de la plage prise en charge, il est sûr de dire que vous ne pourrez pas interroger ces valeurs. Vous pouvez essayer plus et moins que le maximum et le minimum (-3.4E38 à 1.2E38) et voir ce qu'elle renvoie, mais je doute que la requête fonctionne du tout si la table / le champ contient une plage de valeurs non prise en charge.

Cette source suggère que ces valeurs pourraient avoir été importées à partir d'une application tierce non ESRI . Vous devrez peut-être convertir les valeurs en une plage de valeurs prise en charge avant l'importation vers un produit ESRI.

Quant aux valeurs NULL / NuN, il serait utile de savoir exactement ce que nous regardons dans votre exemple; Une table d'attrubute d'une grille, d'un fichier de formes, d'une classe d'entités de géodatabase, etc. Par exemple, les fichiers de formes ne peuvent pas stocker de valeurs NULL . Si une classe d'entités contient des valeurs NULL est convertie en fichier de formes, celles-ci sont stockées sous diverses autres valeurs ("", 0, NuN ?, etc.) mais lorsqu'ils sont affichés dans une table attributaire ArcMap, ils sont toujours représentés visuellement comme "<Null>". Il est possible que l'alignement des valeurs NULL dans votre table d'attributs soit une telle situation. Je ne fais que spéculer sur la raison pour laquelle vous pouvez interroger les valeurs NULL alignées à gauche mais pas les valeurs NULL alignées à droite, mais s'il s'agit d'un fichier de formes, essayez d'importer dans une géodatabase, puis réexécutez la requête. Il est probable que tous ces éléments seront convertis en valeurs NULL appropriées.


@stakx - Je viens de remarquer vos commentaires ci-dessus. Je n'ai pas vu les commentaires pendant que je formulais ma réponse. Je le laisse ici de toute façon.
Jakub Sisak GeoGraphics

En fait, un fichier de formes est une manière plausible dont de telles valeurs peuvent apparaître. Avec un fichier de formes, les nombres sont conservés au format de caractères ASCII en base 10, et non en tant que flottants ou doubles binaires. Si la valeur stockée est convertie en infini ou en NaN, comment ArcGIS l'interprétera-t-il? Probablement au gré de celui qui a codé le lecteur de fichiers de formes (ce qui signifie que le comportement d'ArcGIS pourrait changer à tout moment, en fonction de la version, de la version et de la correction de bogue actuellement en vigueur :-).
whuber
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.