Map Algebra 地图代数

 

Map Algebra 地图代数

三峡大学土木水电学院  肖泽云

 

ArcGIS的空间分析通过地图代数语言(Map Algebra Language),提供了许多丰富的分析工具。地图代数语言(Map Algebra Language)提供了一些能单独运行、也能和其他联合运用的积木块工具来解决问题。当然,要连接这些积木块还需要遵循相关的语法规则。

地图代数语言(Map Algebra Language)中的积木块主要是一些对象(Object)、行为(Action)和修饰(Qualifier),这有点类似于名称、动词和副词,下面来看一下这三个概念:

1)对象(Object

对象要么是存储信息,要么就是一些值,它们是计算的输入部分或输出的存储位置。Raster数据集、Raster图层、表、常数和数值在地图代数语言(Map Algebra Language)中都是对象。

2)行为(Action

行为可以看作是操作或函数,ArcGIS的空间分析主要是进行Raster数据集、Raster图层、要素数据集、要素图层、表、数值等之间的数学计算。这一套操作由算术运算、关系运算、布尔运算、按位运算、逻辑操作(支持整型数据和浮点型数据类型)和组合操作(同时叠加Raster数据集或Raster图层时还保留输入数据的属性值)。

3)修饰(Qualifier

修饰主要是一些用于控制何时何地执行操作的参数,

常数和数值都是一些单值对象,经常都是一些数字。在地图代数语言中经常用到的常数有PI(3.14)E(2.718)DEG(57.296)等。

 

1、地图代数语言基础

操作:

操作可以用于一个或两个输入数据间,这些输入数据包括栅格数据集、栅格图层、数字或常数,如下:

[inlayer1] + [inlayer2]

在上面的等式中将创建一个输出的栅格数据集,它的值为两个栅格图层inlayer1inlayer2的总和。

函数:

一个函数的表达式主要依靠其语法和参数,如下:

sin(c:/data/inraster1)

mean([inlayer1], [inlayer2], [inlayer3])

focalsum([inlayer1], rectangle, 3, 3)

第一个表达式中输出的栅格数据集中每个单元值为栅格数据集inraster1上对应单元值的正弦值,第二个表达式表示对三个图层inlayer1inlayer2inlayer3取平均值。如果要直接调用数据集,则在函数的圆括号()内输入数据集的目录及名称,如果为地图中的图层,则直接采用方括号[]内输入图层名称即可。

带表达式的参数:

如下:

sin([inlayer1]) + pow([inlayer2], 2)

这个表示将图层inlayer1转换成正弦Raster,将图层inlayer2平方,然后和前面的正弦Raster相加。

 

2、地图代数语言中的操作

地图代数语言表达式的结果可以为Raster数据集、要素数据集、表,甚至是ASCII文件。如下:

[inlayer1] * [inlayer2] div c:/data/inraster3

[inlayer1] & [inlayer2]

[inlayer1] + c:/results/inraster2 - [inlayer3]

地图代数语言中圆括号不参与操作,空格也没有任何意义,如下:

([inlayer1] div [inlayer2]) * [inlayer3]

[inlayer1] + ([inlayer2] + 8)

(([inlayer1] * 6) + [inlayer2]) & d:/data/inrast3

 

3、地图代数语言中的函数

所有的函数都是以函数名开头,紧接着就是数据,数据都在圆括号内,具体有需要多少个数据则根据函数而定。如下:

tan([inlayer])

focalmax([inlayer1], rectangle, 4, 4)

zonalmin([zonelayer], [valuelayer])

reclass(ingrid1, remap_table, NODATA)

 

4、地图代数语言中的常用语法

地图代数语言中的常用语法如下:

类型

语法

说明

算术

-

符号

mod

取模

*

/

div

小数除

+

-

布尔

^,not

&,and

!,xor

|,or

关系

<,lt

小于

<=,le

小于等于

>,gt

大于

>=,ge

大于等于

==,eq

等于

^=,<>,ne

不等于

处理上面的一些语法外,还有条件语句,其语法如下:

Con(<condition>, <true_expression>, <false_expression>)

举一个例子:

outraster = con(inraster1 > 5, 10, 100)

上面的表达式表示当inraster1数据中单元值(即象元值)大于5,将会在outraster数据中对应单元位置赋予值10,否则就赋予100

除了上面的一个条件语句,还可以对条件语句进行嵌套,如下例子:

outraster = con(inraster1 < 5, sin(inraster1), _

             con(inraster1 < 20, cos(inraster1), _

              con(inraster1 > 50, 100, 0)))

 

5、打开Map Algebra工具

打开ArcToolbox,选择“Spatial Analyst Tools——Map Algebra”,如下图所示:

图片

有两个Map Algebra 工具,一个是处理单个输出的(Single Output Map Algebra),另一个是处理多个输出的(Multi Output Map Algebra)。

1)单个输出

双击Single Output Map Algebra工具,弹出如下图所示窗体:

图片

Map Algebra expression下输入表达式,如sin(E:/WebHelp/FGDB.gdb/Region),然后在Output raster下选择数据输出的路径及文件名,点击OK按钮开始执行工具。

2)多个输出

当要批量处理多个事件时,就可以采用多个输出。双击Multi Output Map Algebra工具,弹出如下图所示窗体:

图片

同样,在Map Algebra expression下输入表达式,如:

newSlope = SLOPE(DEM)

newShade = HILLSHADE(DEM)

其中newSlopenewShade是自定义的文件名,该文件保存位置还需要通过设置环境来设置。点击“Environments”按钮,出现如下图所示环境设置窗体:

图片

General Settings里面设置Current Workspace,设置当前工作目录,然后点击OK按钮。那么生成的数据newSlopenewShade将保存在刚才设置的当前工作目录下。

在使用多个输出时需要注意的是,需要设置当前工作目录,还需要为每个输出数据设置名称,另外要直接使用Map中的图层,不需要使用中括号。

 

6ArcGIS中包含的Map Algebra函数

通过ArcGIS Desktop Help,查找某个分析工具的使用提示,如果该工具具有对应的Map Algebra函数,那么在使用提示中将会有其对应的Map Algebra函数及其语法格式。如Flow Accumulation工具,通过帮助可以查找到它对应的Map Algebra函数,如下图所示:

图片

其函数为:FlowAccumulation(<dir_grid>, {weight_grid})

其中<dir_grid>为水流流向数据,{weight_grid}为权重数据。注意,如果使用大括号{}的参数表示为可选项,即在此weight_grid为可选项。

除了通过帮助可以查找到ArcGIS常用分析工具对应的Map Algebra函数外,还可以在打开Multi Output Map Algebra工具时,通过点击Multi Output Map Algebra窗体上的Usage按钮,如下图所示:

图片

在弹出的Grid Map Algebra Usages窗体中左侧列出所有的Map Algebra函数,点击相应的函数,在右侧会出现该函数的使用语法结构。如FlowAccumulation对应的语法为:

  (out_float_grid) FLOWACCUMULATION (<dir_grid>, {weight_grid}, {FLOAT | INT})

其中out_float_grid为输出数据,dir_grid为输入数据,weight_gridFLOAT | INT为可选项。

 

7、例子

例子代码

说明

SLOPE([Inlayer1])

计算Inlayer1.图层的坡度

MEAN([Inlayer1], [Inlayer2], [Inlayer3])

计算这三个图层的平均值

HILLSHADE(e:/spatial/elevation)

根据elevation数据创建坡面数据

Shape = GRIDSHAPE(Ingrid)

转换位于工作目录中的数据Ingrid为格网数据,其数据名称Shape,并保存于工作目录下

BASIN(FLOWDIRECTION([elevation]))

首先使用FLOWDIRECTION工具创建一个水流流向数据,然后使用BASIN工具划分流域。

outgrid = con(ingrid1 < 5, sin(ingrid1), ingrid1 < 20, cos(ingrid1), ingrid1 > 50, 100, 0)

使用条件工具创建数据,该数据名称为outgrid,保存于工作目录下

 

参考资料:

1  ArcGIS Desktop 9.2 Help

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值