ArcMap定義クエリでNaNまたは±∞(特別な浮動小数点値)を参照していますか?


10

ArcMapが特別な浮動小数点値をユーザーに表示する方法を偶然発見しました。

  • +∞(正の無限大)は、 1.#INF
  • –∞(負の無限大)は次のように表示されます-1.#INF—これは確認していません。
  • NaN(数値ではない)は右揃えで表示されます—左揃え<Null>と混同しないでください<Null>。これはNULL(欠損値)を示します。

    2つの異なるタイプのNULLを示す、ArcMapで表示されたテーブルのスクリーンショット

    (ところで、フィールド計算機で一意の値取得すると、NaNはまったく表示されません。)

しかし、これらの特別な値に基づいて行を選択するためのレイヤー定義クエリを作成する方法を発見していません。

  • ColumnName IS NULL 通常のNULL値のみが選択され、NaNは選択されません。
  • ColumnName = 1.#INF 構文が無効であるため拒否されます。

誰でもこれを行う方法を知っていますか?


1.#INF値をテーブルフィールドに保存するためのC#ArcObjectsコードスニペット(基本的な概念):

要求通り。私はもう仕事をしていないので、以下は私が使用した実際のコードではなく、現在テストすることはできませんが、上のスクリーンショットに示す効果が得られるはずです。

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

すばらしい質問です。NaNが右揃えの<Null>として表されていることは知りませんでした。私も答えを楽しみにしています。ところで、[属性で検索]ウィンドウで右揃えされた<null>はどのように表示されますか(そのフィールドのすべての個別の値を取得した場合)
Devdatta Tengshe

@Devdatta、私が知る限り、Get unique valuesはNaNをまったくリストしません。
stakx

これはどのようなデータですか?これはグリッドの属性テーブルですか?ArcGIS以外のソースからこのデータをインポートしましたか?
Jakub Sisak GeoGraphics 2012

@Jakub:これはファイルジオデータベース内のテーブルであり、スクリーンショットに示されているフィールドのタイプはDoubleです。いいえ、テーブルはArcObjects&ArcMapで作成および編集されています。
stakx

はい、しかしどのようにしてそのような値をフィールドに入れましたか?
whuber

回答:


2

ArcGISでは、単精度浮動小数点数の範囲は約-3.4E38〜1.2E38です。

1.#INF -1。#INF値が属性テーブル(または属性の分析時にMS Accessを介して)またはグリッド統計に表示されている場合、これらはESRIでサポートされている範囲外の数値である可能性があります。そして、これらの数値が実際にサポートされている範囲外である場合、これらの値をクエリできないと言っても安全です。最大値と最小値(-3.4E38から1.2E38)を何度も試して、何が返されるかを確認することもできますが、テーブルまたはフィールドにサポートされていない値の範囲が含まれている場合、クエリがまったく機能しないのではないでしょうか。

このソースは、そのような値がサードパーティの非Esriアプリケーションからインポートされた可能性があることを示唆しています。ESRI製品にインポートする前に、値をサポートされている値の範囲に変換する必要がある場合があります。

NULL / NuN値については、例で何を見ているかを正確に知っていると便利です。グリッド、シェープファイル、ジオデータベースフィーチャクラスなどの属性テーブル。たとえば、シェープファイルはNULL値を格納できないため、フィーチャクラスがNULL値を含む場合、シェープファイルに変換され、他のさまざまな値( ""、0、 NuN?など)。ただし、ArcMap属性テーブルに表示されても、視覚的には "<Null>"。属性テーブルのNULLの配置がそのような状況である可能性があります。私は、左揃えのNULLをクエリできるが、右揃えのNULLをクエリできない理由について推測しているだけですが、これがシェープファイルの場合は、インポートしてみてくださいジオデータベースに入力してからクエリを再度実行すると、これらすべてが適切なNULL値に変換される可能性があります。


@stakx-上記のコメントに気づきました。回答を作成しているときにコメントが表示されませんでした。とにかくここに置いておきます。
Jakub Sisak GeoGraphics 2012

実際、シェープファイルは、そのような値が発生する可能性のある1つのもっともらしい方法です。シェープファイルでは、数値はバイナリfloatまたはdoubleではなく、base-10 ASCII文字形式で維持されます。格納された値が無限大またはNaNに変換される場合、ArcGISはそれをどのように解釈しますか?おそらく、シェープファイルリーダーをコーディングした人の気まぐれで(つまり、ArcGISの動作はいつでも変更でき、バージョン、リリース、および現在有効なバグ修正によって異なります:-)。
whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.