Verweis auf NaN oder ± ∞ (spezielle Gleitkommawerte) in ArcMap-Definitionsabfragen?


10

Ich habe zufällig herausgefunden, wie ArcMap dem Benutzer spezielle Gleitkommawerte anzeigt.

  • + ∞ (positive Unendlichkeit) wird als angezeigt 1.#INF
  • –∞ (negative Unendlichkeit) wird angeblich angezeigt als -1.#INF- Ich habe diese nicht verifiziert.
  • NaN (keine Zahl) wird als rechtsbündig angezeigt <Null>- nicht zu verwechseln mit linksbündig <Null>, was NULL bedeutet (fehlende Werte):

    Screenshot einer in ArcMap angezeigten Tabelle mit zwei unterschiedlichen NULL-Typen

    (Beim Abrufen eindeutiger Werte im Feldrechner wird NaN übrigens überhaupt nicht aufgelistet.)

Ich habe jedoch nicht herausgefunden, wie Layer-Definitionsabfragen geschrieben werden, um Zeilen basierend auf diesen speziellen Werten auszuwählen:

  • ColumnName IS NULL wählt nur reguläre NULL-Werte aus, jedoch nicht NaN.
  • ColumnName = 1.#INF wird als ungültig abgelehnt.

Weiß jemand, wie man das macht?


C # ArcObjects-Codefragment zum Speichern eines 1. # INF-Werts in einem Tabellenfeld (Grundkonzept):

Wie gewünscht. Da ich nicht mehr bei der Arbeit bin, ist das Folgende nicht der echte Code, den ich verwendet habe, und ich kann ihn derzeit nicht testen, aber er sollte den im obigen Screenshot gezeigten Effekt erzeugen:

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

Ausgezeichnete Frage. Mir war nicht bewusst, dass NaN als rechtsbündig <Null> dargestellt wird. Auch ich freue mich auf die Antworten. Übrigens, wie sieht das rechts ausgerichtete <null> im Fenster Search by Attribute aus (wenn Sie alle unterschiedlichen Werte für dieses Feld erhalten?)
Devdatta Tengshe

@ Devdatta, soweit ich das beurteilen kann, listet Get unique values NaN überhaupt nicht auf.
Stakx

Um welche Art von Daten handelt es sich? Ist dies eine Attributtabelle eines Grids? Haben Sie diese Daten aus einer Nicht-ArcGIS-Quelle importiert?
Jakub Sisak GeoGraphics

@Jakub: Dies ist eine Tabelle in einer Datei-Geodatabase, und die im Screenshot gezeigten Felder haben den Typ Double. Und nein, die Tabelle wurde mit ArcObjects & ArcMap erstellt und bearbeitet.
Stakx

Ja, aber wie haben Sie solche Werte in die Felder gebracht?
whuber

Antworten:


2

In ArcGIS hat eine Gleitkommazahl mit einfacher Genauigkeit einen Bereich von ungefähr -3,4E38 bis 1,2E38.

Wenn Sie tatsächlich die 1. # INF -1. # INF-Werte sehen, die in Ihrer Attributtabelle (oder über MS Access bei der Analyse von Attributen) oder Rasterstatistiken angezeigt werden, sind dies möglicherweise Zahlen, die außerhalb des von ESRI unterstützten Bereichs liegen. Und wenn diese Zahlen tatsächlich außerhalb des unterstützten Bereichs liegen, können Sie mit Sicherheit sagen, dass Sie diese Werte nicht abfragen können. Sie könnten versuchen, mehr und weniger als das Maximum und das Minimum (-3,4E38 bis 1,2E38) zu erreichen und zu sehen, was zurückgegeben wird. Ich bezweifle jedoch, dass die Abfrage überhaupt funktioniert, wenn die Tabelle / das Feld einen nicht unterstützten Wertebereich enthält.

Diese Quelle legt nahe, dass solche Werte möglicherweise aus einer Nicht-ESRI-Anwendung eines Drittanbieters importiert wurden . Möglicherweise müssen Sie die Werte vor dem Import in ein ESRI-Produkt in einen unterstützten Wertebereich konvertieren.

Bei den NULL / NuN-Werten wäre es hilfreich, genau zu wissen, was wir in Ihrem Beispiel betrachten. Eine attrubute-Tabelle eines Rasters, eines Shapefiles, einer Geodatabase-Feature-Class usw. In Shapefiles können beispielsweise keine NULL-Werte gespeichert werden. Wenn also eine Feature-Class, die NULL-Werte enthält, in ein Shapefile konvertiert wird, werden diese als verschiedene andere Werte gespeichert ("", 0, NuN? Usw.), aber wenn sie in einer ArcMap-Attributtabelle angezeigt werden, werden sie visuell immer noch als "<Null>". Es ist möglich, dass die Ausrichtung der NULL-Werte in Ihrer Attributtabelle eine solche Situation darstellt. Ich spekuliere nur darüber, warum Sie die linksausgerichteten NULL-Werte, aber nicht die rechts ausgerichteten NULL-Werte abfragen können. Wenn dies jedoch ein Shapefile ist, versuchen Sie es zu importieren Führen Sie die Abfrage dann erneut in eine Geodatabase aus. Möglicherweise werden alle diese Werte in die richtigen NULL-Werte konvertiert.


@stakx - Ich habe gerade Ihre Kommentare oben bemerkt. Ich habe die Kommentare nicht gesehen, als ich meine Antwort formulierte. Ich lasse es trotzdem hier.
Jakub Sisak GeoGraphics

Tatsächlich ist ein Shapefile eine plausible Möglichkeit, wie solche Werte auftreten können. Bei einem Shapefile werden Zahlen im ASCII-Zeichenformat der Basis 10 verwaltet, nicht als binäre Gleitkommazahlen oder Doppelzeichen. Wenn der gespeicherte Wert in eine Unendlichkeit oder NaN konvertiert wird, wie wird er von ArcGIS interpretiert? Wahrscheinlich nach Lust und Laune desjenigen, der den Shapefile-Reader codiert hat (was bedeutet, dass sich das ArcGIS-Verhalten jederzeit ändern kann, abhängig von der Version, der Version und der derzeit gültigen Fehlerbehebung :-).
whuber
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.