ArcGIS Zonal统计信息中的主要错误?


25

更新:该错误已在ArcGIS 10.4版本中修复。

我正在使用ArcGIS 10.2.2确定许多区域的区域统计信息。如果值栅格中有任何NoData,则我希望区域结果为“ NoData”,正如工具说明所宣传的那样。该工具说明指出:

数据-在任何特定区域内,只有在输入值栅格中具有值的像元才会用于确定该区域的输出值。在统计计算中,将忽略“值”栅格中的NoData像元。

NODATA —在任何特定区域中,如果“值”栅格中存在任何NoData像元,则认为没有足够的信息来执行对该区域中所有像元的统计计算;因此,整个区域将在输出栅格上接收NoData值。

请看一下我在这张照片中的设置: 在此处输入图片说明

我将NODATA选项与具有一个NoData像素的值栅格一起使用,因此期望结果区域值(区域61154)为'NoData'。取而代之的是,我得到的值为12.74(在图像中四舍五入为13),这在两个层次上使我感到困惑:首先,我期望'NoData',其次,从数学上讲,所得的12.74的值在数学上是不可能的,因为均值不能更大比值栅格中的最大值(在这种情况下为10)大。

如果我使用DATA选项,则得到的值约为9.1,这很有意义。我们在不同的数据集,计算机和ArcGIS版本上对此进行了测试。

我在这里想念什么?

编辑/附加评论:我刚刚注意到,“ Count”属性对于该特定区域也是错误的。在该区域中确实有421个像元,但该工具仅计数297。计算421减去297得出124-奇怪的是,这是NoData像素所在的“位置”,如果从左上到下数像素就在区域中。该工具可能会弄错单元格计数(太低),这可能解释了平均值的增加。

编辑:这是我正在使用的数据链接

编辑:丹·帕特森和我做了一些进一步的调试这里在ESRI论坛。


1
是的,它确实会产生一些疯狂的东西。在我的情况下,栅格(16,86)的MEAN = 537。不好笑
FelixIP

使用什么值来表示此栅格中的NoData?
Jezibelle,2015年

@Jezibelle:好问题,我在哪里可以找到可靠的答案?如果我导出为Ascii,则为-9999。如果我从上下文菜单中使用导出功能,则导出对话框的“ NoData as:”字段将预先填充2147483647。这会引发一个标志吗?
G-wizard

它会在属性表中显示为一行
Jezibelle,2015年

1
我在帖子的末尾做了另一个编辑,在这里我链接到 ESRI论坛上的类似帖子。确认错误(有错误)。与计算“全部”统计信息相比,计算“平均”只会产生不同的结果/更糟糕的结果。
G-向导

Answers:


9

似乎有一个与您所遇到的错误相对应的错误-它已注册为BUG-000084883-在区域统计中作为表工具{和Zonal Statistics工具}的“忽略计算中的NoData”选项在选中时不被接受,产生错误的结果。

它在10.3和10.2.2中出现,但在10.1中不出现。您是否尝试过此版本的工具?


尽管我个人不知道如何运行该工具的较旧版本,但这听起来是个好方法。有人知道在哪里指向我尝试这项工作吗?
UdderlyAstray

感谢@GISGe。您在哪里找到的?是否有记录此错误的链接?
G-向导

1
@ G-wizard-我已经在答案中添加了链接。作为Esri国际人员,我可以访问比您看到的更为详细的描述,这就是我可以告诉您的错误,该错误也适用于区域统计工具,而在10.1中找不到。
GISGe 2015年

@UdderlyAstray-如果要运行该工具的旧版本,则必须安装该旧版本的ArcGIS。
GISGe 2015年

1
再次感谢@GISGe,因为这是我正在寻找的东西(已正式确认错误),所以我将此答案标记为正确的答案,尽管其他人也通过测试进行了确认。
G-向导

9

这是一个错误。细胞计数出了点问题。

正确的平均值(9.0452380952381)乘以正确的非空单元格数(420)除以297(即工具报告的单元格计数)得出的结果为12.7912457912458。该工具报告的平均值有误。

我自己的玩具尺寸网格测试结果:

在此处输入图片说明


1
我确认我对10.3,NODATA和“ MEAN”也有相同的问题
radouxju 2015年

谢谢双方确认。但是,除了均值的差异外,我以为结果实际上不应该是任何值,而应该是'NODATA'是错误的吗?该工具的描述使我相信这一点。说:“ NODATA-在任何特定区域内,如果值栅格中存在任何NoData像元,则认为没有足够的信息来对该区域中的所有像元执行统计计算;因此,整个区域将接收NoData值在输出栅格上。” 因为有一个像素带有“ NODATA”,所以区域统计也应该是“ NODATA”。对吗
G-wizard

2
@ G-wizard,您是正确的,如工具说明中所述。有点类似于#DIV / 0!在Excel中。
c0ba1t

1

另一个答案类似,将栅格数据移动到NumPy掩码数组中以计算统计信息。假设两个重叠的栅格具有相同的形状,这很简单:

import numpy as np
zones = arcpy.RasterToNumPyArray("zones")
value = np.ma.masked_equal(arcpy.RasterToNumPyArray("value"),
                           arcpy.Raster("value").noDataValue)
print("Zone\tCount\tNoData\tMean")
for z in np.unique(zones):
    sel = (zones == z)
    print z, sel.sum(), value.mask[sel].sum(), value[sel].mean()

显示:

Zone    Count   NoData  Mean
61131   53   0   8.92452830189
61154   421   1   9.04523809524
61207   1   0   8.0
61317   35   0   7.2
61644   644   0   7.90838509317
61677   12   0   7.41666666667
61789   7   0   9.0
61871   193   0   7.98445595855
187472   349   0   8.5787965616
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.