在ArcMap定义查询中引用NaN或±∞(特殊浮点值)?


10

我偶然发现了ArcMap如何向用户显示特殊的浮点值。

  • +∞(正无穷大)显示为 1.#INF
  • –∞(负无穷大)应该显示为-1.#INF—我尚未验证这一点。
  • NaN(不是数字)显示为右对齐<Null>-请勿与left-aligned混淆<Null>,后者表示NULL(缺少值):

    在ArcMap中查看的表的屏幕截图,显示了两种不同的NULL类型

    (顺便说一下,在字段计算器中获取唯一值根本不会列出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 2012年

@Devdatta,据我所知,获取唯一值根本没有列出NaN。
stakx'2

这是什么样的数据?这是网格的属性表吗?您是否从非ArcGIS来源导入了这些数据?
Jakub Sisak GeoGraphics 2012年

@Jakub:这是文件地理数据库中的一个表,屏幕快照中显示的字段的类型为Double。否,该表已使用ArcObjects&ArcMap创建和编辑。
stakx'2

是的,但是您是如何将这些值输入字段的呢?
ub

Answers:


2

在ArcGIS中,单精度浮点数的范围约为-3.4E38至1.2E38。

如果您实际上看到的是属性表中显示的1.#INF -1。#INF值(或在分析属性时通过MS Access)或网格统计信息,则这些数字可能超出了ESRI支持的范围。如果这些数字确实超出了支持的范围,可以肯定地说您将无法查询这些值。您可以尝试大于和小于最大值和最小值(-3.4E38至1.2E38),然后查看返回的内容,但我怀疑如果表/字段包含不受支持的值范围,查询将完全起作用。

该来源表明,此类值可能是从第三方非ESRI应用程序中导入的。在导入到ESRI产品之前,可能需要将这些值转换为支持的值范围。

至于NULL / NuN值,准确了解我们在您的示例中所看到的内容将很有用;网格,shapefile,地理数据库要素类等的属性表。例如,shapefile无法存储NULL值,因此,如果将包含NULL值的要素类转换为shapefile,则会将其存储为其他各种值(“ ,, 0, NuN?等),但当显示在ArcMap属性表中时,它们仍在视觉上表示为“<Null>“。在属性表中NULL的对齐可能是这种情况。我只是在推测为什么您能够查询左对齐的NULL,但不能查询右对齐的NULL,但是如果这是一个shapefile,请尝试导入放入地理数据库,然后再次运行查询,所有这些都可能会转换为正确的NULL值。


@stakx-我刚刚注意到您在上面的评论。在制定答案时,我没有看到评论。我还是把它留在这里。
Jakub Sisak GeoGraphics 2012年

实际上,shapefile是可能出现这种值的一种可行方式。对于shapefile,数字以10为基数的ASCII字符格式维护,而不是二进制浮点数或双精度数。如果存储的值转换为无穷大或NaN,ArcGIS将如何解释它?可能是对shapefile阅读器进行编码的人心血来潮(这意味着ArcGIS行为可以随时更改,具体取决于当前生效的版本,发行版和错误修复:-)。
ub
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.