处理大数据量栅格数据的经验

时间:2022-02-22 21:24:38

处理大数据量栅格数据的经验

     最近,从网上下载了份全美分带分块的DEM数据,因为应用需要,需要将这些分块的DEM镶嵌成为一个DEM。在数据处理的过程中,遇到了一些问题,也积攒了一些经验,所以,就在此把这次经验分享,希望自己的经验能有用武之地。

1.下载数据

http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp这个网站上,除了夏威夷州,美国本土范围内的DEM。总共有58块DEM,存放在一个数据源中。
处理大数据量栅格数据的经验

图1:SRTM网站上的美国DEM数据示意
处理大数据量栅格数据的经验

图2:下载的分带分块的DEM数据示意

2.分带镶嵌

数据下载好了,接下来面临的问题就是如何把它们镶嵌成为一个全美的DEM?安全起见,采用分带的方式镶嵌。如图1中所示的,将所有的数据分为5个带进行镶嵌:12–13带;14–15带;16–17带;18–19带;剩余20带以后的。
处理大数据量栅格数据的经验

图3:分成5带镶嵌后的效果

在分带镶嵌的过程中,也遇到了一些小插曲。12–13带和20带以后的,镶嵌起来是这样的效果:
处理大数据量栅格数据的经验
图4-1:12–13带效果示意

而不是这样的:
处理大数据量栅格数据的经验
图4-2: 12-13带效果示意

为何会出现这种情况?查看了下数据集的属性,发现原因原来在这里:
处理大数据量栅格数据的经验

图5-1:属性对话框–最小值存在问题

看图5中红框内所示,此栅格数据的最小值为-9999,这样的最小值肯定是不对了,所以也导致根据栅格值来表现的颜色表也显示的不正确。那这种情况改如何处理呢?我的处理方式是这样的:

  • 1.使用栅格代数运算中的con()条件提取函数,将栅格中值等于-9999的,值改变为-32768,其余的保持不变。条件表达式是这样的:

Con( [usdem.srtm_12_13_all] == -9999,-32768,[usdem.srtm_12_13_all] )

释疑:为什么要将-9999更改为-32768?因为从网上下载的这些栅格数据,无值都是-32768,为保持一致,就更改为此值。-9999是桌面软件中默认的无值数值,实际上,可以将任意的栅格值设置为无值的值。

另外,在进行代数运算的时候,要注意结果数据的“像素格式”和原始的数据保持一致。

  • 2.在1操作之后,必须要“重新计算极值”,这样栅格数据的极值才能更改过来。再次打开数据,显示的效果就正确了。
    处理大数据量栅格数据的经验
    图5-2: 属性对话框–最小值正确

数据处理正确了,接下来就是将分带的镶嵌成为整个的DEM了。

  • 3.大镶嵌。

经过仔细的检查、确认数据没问题后,就可以进行整体的镶嵌了。大数据量的运算,建议还是采用性能较好的计算机,这样在运算效率上能有保障。用新配置的计算机进行镶嵌操作,结果5份数据镶嵌,花了将近6个小时!问题又出在哪里了?还有木有方法优化?把这一情况反馈给组件层的同事,支了个招,果然好使很多,数据镶嵌的效率立刻提升到了30分钟以内!

这招就是:把桌面bin目录下SuperMap.xml中的256参数中的256更改为600,栅格数据处理时的块缓存数目。

另外,在进行镶嵌的时候,因为这份数据的无值是-32768,无值就的改成这个;镶嵌时编码类型选择“SGL”(无损压缩),得到的结果数据集就会小很多。例如,选择“未编码”时,只存放这整个结果的数据源有16G多,选择“SGL”,就只有2G多,这压缩率是杠杠滴。最后来张处理完的效果后:
处理大数据量栅格数据的经验

图6:结果栅格数据示意

PS:图6中的颜色表,是根据网站上的颜色拾取,重新制作的一个颜色方案。

以上就是在处理这批数据时遇到的一些问题而攒到的一些经验,希望有帮助到大家。