ArcGis Chapter02.docx

上传人:b****4 文档编号:11710100 上传时间:2023-03-30 格式:DOCX 页数:10 大小:38.29KB
下载 相关 举报
ArcGis Chapter02.docx_第1页
第1页 / 共10页
ArcGis Chapter02.docx_第2页
第2页 / 共10页
ArcGis Chapter02.docx_第3页
第3页 / 共10页
ArcGis Chapter02.docx_第4页
第4页 / 共10页
ArcGis Chapter02.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

ArcGis Chapter02.docx

《ArcGis Chapter02.docx》由会员分享,可在线阅读,更多相关《ArcGis Chapter02.docx(10页珍藏版)》请在冰豆网上搜索。

ArcGis Chapter02.docx

ArcGisChapter02

19

第二章距离和时间的测量

本章介绍空间分析中经常遇到的一个问题:

测量距离和时间。

空间分析归根结底是考察自然和人类活动在空间分布上的变化,换言之,即考察这些活动相对于参照位置随距离的变化。

很多时候,一旦通过GIS测定了距离或时间,我们就可以在GIS环境之外开展进一步的研究。

GIS技术的不断进步和广泛应用使得相关研究工作变得越来越容易。

距离和时间的估算贯穿全书。

例如,在第三章的空间平滑和空间插值中使用距离测量来确定纳入计算的对象及其对计算影响的程度。

在第四章服务区分析中,商店与消费者之间的距离(或时间)确定了距离消费者最近的商店以及居民到商店购物的频率。

第五章可达性测量中,距离或时间是构建移动搜寻法或引力法的基础。

第六章考察的就是人口密度或土地利用强度从城市或区域中心向外随距离衰减的态势。

在本书其他各章中也都会用到距离或时间的测量。

本章的结构如下。

第2.1节概略介绍各种距离度量。

第2.2节介绍如何计算网络的最短距离(时间)及其如何用ArcGIS来实现。

第2.3节为方法示例,计算了中国东北地区各县与几大中心城市间的欧式距离和路网距离(Find/Replaceall)。

第2.4节是本章的简要小结。

2.1距离的测量

日常用到的距离包括欧式距离(直线距离)、曼哈顿距离和网络距离。

欧式距离是两点之间的直线距离。

除非特别说明,本章提到的距离都是欧式距离。

在有GIS之前,我们全靠用数学公式来计算距离,计算的准确性有限,也受收集到的数据精度和所用和计算公式的复杂性影想。

如果研究区的地理范围较小(如一个城市或一个县域单元),直角坐标系下两个结点(x1,y1)、(x2,y2)之间的欧式距离可以近似地表作

(2.1)

20

如果研究区范围较大(如一个州或一个国家),则需要计算大地距离,要考虑到地球的曲面。

两点之间的大地距离是假设地球为球形时两点之间的最大圆弧的长度。

已知两点的地理经纬度坐标以弧度计为(a,b)、(c,d),他们之间的大地距离为

(2.2)

这里,r为地球半径(约为6,367.4km)。

正如其名,曼哈顿距离是度量那些路网类似纽约曼哈顿区(正北正南直东直西)距离。

曼哈顿距离是x和y方向距离之和。

欧氏距离是直角三角形中的弦,曼哈顿距离为勾,股之和。

例如,直角坐标系下,两点(x1,y1)、(x2,y2)之间的曼哈顿距离记为

(2.3)

与式(2.1)一样,式(2.3)定义的曼哈顿距离只在一个较小地区内(例如一个城市)才有意义。

网络距离是基于实际路网(如公路网,铁路网)的最短路径(或最短时间或最小成本)距离,将在第2.2节中详细讨论。

如果是栅格形路网,可以用曼哈顿距离近似地代替网络距离。

在ArcGIS中,可以通过简单地点击

(“measure”)工具来得到两点之间的欧式距离(或若干点之间的累计距离)。

许多ArcGIS空间分析会顺带给出一些距离值。

例如,第1.3节介绍的距离连接(空间连接法)给出了两个空间数据集合中不同物体之间的最短距离。

在空间连接中,线或多边形之间的距离是最近点之间的距离。

在ArcToolbox>AnalysisTools>Proximity中,Near工具用来计算图层中任一点与另一图层中跟它最近的线或点的距离。

某些操作需要用到同一图层或不同图层中任意两点之间的距离即距离矩阵。

ArcToolbox里的点距离(PointDistance)工具可以实现这个功能,调用办法为依次点击ArcToolbox>AnalysisTools>Proximity>PointDistance。

在输出文件中,如果DISTANCE值为0,则可能实际距离确实为0(例如,某点跟它自身的距离),也可能是超出了搜索半径之外。

当前ArcGIS版本中没有内嵌不太常用的曼哈顿距离计算工具。

计算曼哈顿距离时,需要从ArcToolbox生成各点的直角坐标。

对于一个shape文件,可以调用DataManagementTools>Features>AddXYCoordinates来实现。

对于一个coverage文件,可以调用CoverageTools>DataManagement>Tables>AddXYCoordinates来完成。

在ArcGIS中计算网络距离则更为复杂,我们将用以下两节介绍。

21

2.2测算网络距离和网络时间

网络由一组结点及连接结点的线段(边或连接线)组成。

如果线段方向是确定的(如单向的街道),我们得到一个定向网络。

一个没有确定方向的网络可以看作定向网络的一种特例,即每条线段有两个可能的方向。

最短路径问题就是寻找从某个起点到某个终点之间的最短路径,即在给定线段阻滞(如旅行速度)的情况下距离最短或时间(费用)最省。

最短路径问题有多种解决办法,如本节将要讨论的标号设定算法及附录2中介绍的赋值图像法(或L-矩阵法)。

2.2.1最短路径问题的标号设定算法

广为使用的标号设定算法最早由迪卡斯缺(Dijkstra,1959)提出。

该方法是这样的,为每个结点设置一个“标签”,代表到某个结点的最短距离。

为简便起见,起始结点被名为结点1。

本法包括如下四步:

1.赋予起始结点(结点1)的固定标签y1=0,其他结点赋予一个临时标签yj=M(一个很大的数)。

令i=1。

2.以结点i为起点,重新计算临时标签yj=min(yj,yi+dij),从而得到结点j的临时标签,并且dij

3.寻找所有临时标签中的最小值,例如yi。

于是,结点i得到一个固定的标签值yi*。

4.重复上述2~3步直到所有结点都得到一个固定的标签值。

我们用下面的例子来演示这种方法。

图2.1a为由结点及连接线组成的网络,连接线上的数字为阻滞。

(1)步,设置结点1的固定标签值为y1*=0;临时标签y2=y3=y4=y5=M。

令i=1。

固定标签以“*”标记。

见图2.1b。

(2)步,结点1与结点2、3相连,于是重新计算得到2、3的临时标签。

y2=min(y2,y1+d12)=min(M,0+25)=25,类似地,y3=min(y3,y1+d13)=min(M,0+55)=55。

第(3)步,最小的临时标签值是min(25,55,M,M)=25=y2。

于是给结点2一个固定标签,令i=2。

见图2.1c。

22

回到第

(2)步,重新计算结点3、4、5的临时标签值。

结点2与结点3、4、5相连。

y3=min(y3,y2+d23)=min(55,25+40)=55,y4=min(y4,y2+d24)=min(M,25+45)=70,y5=min(y5,y2+d25)=min(M,25+50)=75。

再是第(3)步,最小临时标签值为min(55,70,75)=55=y3。

给结点3一个固定标签,令i=3。

参见图2.1d。

再回到第

(2)步,重新计算结点4、5的临时标签值。

结点3与结点5相连,则y5=min(y5,y3+d35)=min(75,55+30)=75。

再是第(3)步,最小临时标签值为min(70,75)=70=y4。

给结点4一个固定标签,令i=4。

参见图2.1e。

再回到第

(2)步,计算结点5的值。

从结点4到结点5,可得y5=min(y5,y4+d45)=min(75,70+35)=75。

结点5是剩下的唯一临时标注点,因此我们给它一个固定标签。

于是,所有结点都得到一个固定值,问题得到解决。

参见图2.1f。

23

固定标签值yi是结点1到结点i之间的最短距离。

一旦某个结点被赋予一个固定的标签值,则该结点被扫描一次。

当标签改变时,最短距离随之改变,并以“扫描结点”的形式保存下来(WuandCoppins,1981:

319)。

上面的例子可以总结为表2.1。

2.2.2用ArcGIS测算网络距离和时间

ArcGIS中处理的网络包括交通网络和市政管道网络,我们这里只讨论交通网络。

许多GIS教科书(如Chang(2004),第十六章;Price(2004)第十四章)讨论了如何用ArcGIS获取两点之间的距离(或某点与多个点之间的距离)。

在许多空间分析中,我们需要一系列起点和终点两两之间的距离矩阵。

为此,需要用ArcInfo工作站,即用ArcPlot模块里面的NODEDISTANCE命令。

默认情况下,NODEDISTANCE命令是通过公路网络来计算最短距离。

同时它也提供了计算欧式距离或曼哈顿距离的选项。

恰当地定义选项IMPEDANCE作为时间或成本,就可以计算最短交通时间或最小交通成本。

下面介绍如何用ArcGIS计算网络距离矩阵。

第一步,建立网络。

交通网络由线段费时、转弯费时、单行线、天桥、地下通道等网络要素构成(Chang,2004:

351)。

建立这样一个路网的数据采集和处理工作量都很大,往往是非常昂贵甚至是不可行的。

例如,从美国人口普查局的TIGER线文件里提取的公路图层并不包含公路结点、转弯参数或限速等信息。

在此情况下,我们只好假设用一些自动工具(如ArcGIS里构建拓扑关系的工具)生成的公路结点是相对可靠的,近似反映了真实路网的情况。

而对于线段费时,我们可以基于道路等级设定限速标准,并考虑到交通堵塞的因素。

有的研究(LuoandWang,2003根据美国统计局)在TIGER线文件中公路等的CFCC编码来设定公路限速。

另一项研究(Wang,2003基于土地利用强度(商业和居住密度)及其他一些因素建立回归模型来考虑交通堵塞程度从而预测行车速度。

第二步,用NETCOVER命令建立网络计算的路径系统。

第三步,定义始结点、末结点及阻力参数。

可以用CENTERS、STOPS、NODES等来定义始末结点,用IMPEDANCE指定用网络属性表中的哪一项来定义线段长度或费时。

24

最后,用NODEDISTANCE命令来计算始末结点之间的网络距离。

需要注意的是,NODEDISTANCE命令只计算网络上结点之间的距离。

但是,起始点或终点有可能并不在网络上。

虽然起始点(或终点)到网络结点之间的距离有可能很小,但仍需计算在内。

这是计算网络距离时需要考虑的一个重要步骤,详见下面的案例2。

2.3案例2:

测算中国东北地区各县到四大中心城市之间的距离

本例计算中国东北地区各县到中心城市之间的距离。

所得结果将在案例4B中用于定义城市腹地(参见第四章,第4.4节)。

我们的研究区选为中国的东北平原是因为该地区是一个相对完整的区域。

包括三个省:

黑龙江、吉林和辽宁。

按人口和经济规模划分,有4大中心城市:

三个省会城市(哈尔滨、长春、沈阳)和大连。

铁路一直是中国客货运输的主要方式,在本研究区尤其如此,因此这里用铁路来测量网络距离。

参见图2.2。

本书光盘提供了本例所需的下述数据:

1.包含中国东北地区203个县(或县级行政单元)的多边形文件cntyne;

2.本区4大中心城市的点文件city4;

3.研究区铁路网络的线文件railne。

为了保证网络的完整性,铁路网络涵盖的范围比三个省区略大。

这里关于各县和中心城市的空间数据是从中国县级单元GIS数据库中提取,可以从http:

//sedac.ciesin.columbia.edu/china下载。

铁路数据由中国科学院地理科学与资源研究所的金凤君先生提供。

2.3.1测算欧式距离和曼哈顿距离

如前所述,欧式距离和曼哈顿距离可以通过网络分析中心NODEDISTANCE命令来实现。

本节介绍如何不用到网络分析来计算这两种距离。

曼哈顿距离不适于象中国东北这么大区域范围内的测量(参见第2.1节),下面第(3)-(5)步中演示的曼哈顿距离的计算方法,为可选操作。

1.生成县域重心

在ArcToolbox中依次选择DataManagementTools>Features>FeatureToPoint,选择cntyne作为输入要素,并将输出要素(县域重心)命名为CntyNEpt,选中选项。

“Inside”(既重心在县城范围)

2.计算欧式距离

25

在ArcToolbox中,依次选择AnalysisTools>Proximity>PointDistance,选择CntyNEpt作为输入要素(InputFeatures),选择city4(point)作为近邻要素(NearFeatures),并将结果命名为Dist.dbf。

这里不需要限定收索半径,因为我们需要计算所有的距离。

所得表中一共有203(县)×4(市)=812条距离记录。

在距离表中加入一列airdist,根据公式airdist=distance/1000计算,得到欧式距离的公里数(原图距离单位是米)。

26

3.可选操作:

添加县域重心及城市重心的XY坐标

在ArcToolbox中,依次选择DataManagementTools>Features>AddXYCoordinates,选择CntyNEpt作为输入要素。

在CntyNEpt的属性表中,所得结果保存在point-x和point-y两列中。

此外,在ArcToolbox中,依次选择CoverageTools>DataManagement>Tables>AddXYCoordinates,选择city4作为输入文件。

在属性表city4中,所得结果保存在x-coord和y-coord两列中。

4.可选操作:

将坐标连接到县和市的距离表

在ArcMap中,右键点击表Dist.dbf,依次选择JoinsandRelates>Join,用CntyNEpt(源数据表)中的FID和Dist.dbf(目标表)中的INPUT_FID作为连接关键词将二表连接在一起。

类似地,用City4属性表中的FID和新Dist.dbf表中的NEAR_FID作为连接关键词将二表连接在一起。

5.可选操作:

计算曼哈顿距离

打开新表Dist.dbf,添加一列Manhdist,按照公式Manhdist=abs(x-coord-point-x)/1000+abs(y-coord-point-y)/1000计算数值。

所得曼哈顿距离的单位为公里,通常比欧式距离大。

2.3.2第二部分:

测算交通路网距离

26

27

两地之间(这里是起始县城与目的地中心城市)的交通距离由三部分组成。

图2.3给出了一个示例:

(1)第一段(S1)是县城编号76到它最近的铁路结点171的直线距离;

(2)第二段(S2)是铁路上两结点171和162之间铁路网络距离(途经165和163两个结点);(3)第三段(S3)是中心城市编号4到它最近的铁路结点162的直线距离。

在这里,S1和S3以直线距离近似地代替,S2为两结点之间的路网距离。

换言之,从县城#76到城市#4,假设其通行路径为:

先从县城#76到最近的结点171,然后通过铁路到结点162(途经结点165和163),最后到达中心城市#4。

本节的主要工作即是寻找这些距离县城或城市最近的铁路结点,然后计算上述三段的距离,最后将其加总。

1.准备交通网络图层

在ArcToolbox中,依次点击CoverageTools>DataManagement>Topology>Build,在railne图层上创建线拓扑关系。

重复此过程,创建点拓扑关系。

理想状态下,结点应定义为实际的铁路站点。

但我们没有这样的数据,这里假设ArecGIS拓扑工具产生的结点就是铁路站点。

2.计算县城、城市与最近铁路结点之间的直线距离

在ArcToolbox中,依次选择AnalysisTools>Proximity>Near,并选择CntyNEpt作为输入要素,railne(结点)作为最近邻要素(NearFeatures)。

在更新后的CntyNEpt属性表中,NEAR_FID列为距离县城的最近结点,而列NEAR_DIST为它们之间的直线距离。

用图层city4重复上述操作得到离中心城市最近的结点:

以city4(点)为输入要素,railne(结点)为最近邻要素。

在更新后的City4属性表中,列NEAR_FID为距离城市最近的铁路网络结点,另外的一列NEAR_DIST为它们之间的直线距离。

这一步工作分别得到了县城和城市与其最近铁路结点之间的直线距离(图2.3中的S1和S3)。

3.寻找起,始结点对

在计算路网距离时,起(始)结点不能重复。

在CntyNEpt属性表中,有多个县城对应NEAR_FID中的同一个结点。

例如,编码FID=5及FID=8的两个县城,其最近邻结点都是NEAR_FID=34的结点。

也就是说,一些近邻的县城共享铁路网络上的同一个最近邻结点(始结点)。

在city4属性表中,每个中心城市对应不同的铁路结点(末结点),因此无需再处理,四个中心城市对应于四个不同的末结点,下面介绍如何定义不重复的始结点。

打开属性表CntyNEpt,右键单击列NEAR_FID,选择Summarize,将结果保存为表Sum_FID.dbf,在该表中,列Cnt_NEAR_F(频率统计)代表每个NEAR_FID结点对应的县城数。

当频率数大于1时,表明是多个县城共享同一个结点。

表Sum_FID.dbf有149条记录,表明有149个不同的始结点。

4.定义始末结点的INFO文件

28

这一步主要为下一步准备两个INFO文件:

一个包括所有的始结点,另一个包括所有的末结点。

这两个INFO文件都必须用ArcInfoworkstation来生成。

数据表Sum_FID.dbf用于生成始结点的INFO文件,属性表city4.pat本身已经是INFO文件了,它将用于生成末结点的INFO文件。

在ArcInfoworkstation中,多边形或点图层的属性表文件扩展名为.PAT,意为Polygon(Point)AttrabuteTable多边形(或点)属性表;线(Arc)属性表文件的扩展名为.AAT;结点(Node)的属性表文件扩展名为.NAT。

ArcInfoworkstation里的操作方法如下:

在ArcInfoworkstation中,切换到目标工程文件夹(路径)(例如,通过输入命令wc:

\Quant_GIS\proj2来实现),然后输入下述命令(这里,“/*”之后的内容为命令行的注释说明):

Dbaseinfosum_fid.dbftmp/*sum-fid。

dbf转换成名为“tmp”的INFO文件

Pullitemstmpfm_nodenear_fid/*提取tmp中的“near_fid”,并生成INFO文件“fm_node”,即始结点文件

Pullitemscity4.patto_nodenear_fid/*提取city4.pat中的“near_fid”并生成INFO文件“to_node”,即末结点文件。

INFO文件fm_node和to_node中的列名称near_fid需要改为railne-id以便与铁路图层中的名字相对应。

结点属性表railne.nat中的railne-id为每个结点的唯一标志码。

这可以用ArcCatalog来实现:

右键单击fm_node(或to_node),从内容菜单中选择属性(Properties),选择Items标签,打开对话框窗口,点击Edit可以修改某项的名字。

熟练的ArcInfoworkstation用户,可以在workstation环境下修改变量名,也可以通过编写一段AML程序来自动实现。

5.计算铁路网络结点之间的距离。

可以用下述ArcInfoworkstation命令来实现:

ap/*调用arcplot模块

netcoverrailnerailroute/*设置路径系统

centersfm_node/*定义始结点

stopsto_node/*定义末结点

nodedistancecentersstopsrdist3000000networkids

q/*退出

在这里的“nodedistance”命令以3,000公里(或一个非常大的距离值)作为阈值,计算centers中每个结点跟stops中每个结点两两之间的距离,所得结果生成一个名为rdist的INFO文件。

最后两个参数是可选参数:

“network”为默认选项(其他两个选项为“Euclidean”、“Manhattan”,分别用于计算欧式距离和曼哈顿距离),参数“ids”用于指定结点的ids值作为始末结点的唯一标志(默认值为“noids”)。

在INFO文件rdist中,railne-ida项用于确定始结点,railne-idb项用于确定末结点,而network是它们之间的距离。

上述过程用于计算始末结点之间的距离(即图2.3中的S2)。

在fm_node表中有149个始结点,表to_node中有4个末结点,从而rdist中有149×4=596条距离值,这比欧式距离文件Dist.dbf中的812条距离值要少。

29

下一步是将这三段距离值连接到一起:

S2保存在表rdist中,而我们在上述第2步中得到的S1和S3分别保存在更新后的表CntyNEpt和city4中。

然而,我们不能简单地将CntyNEpt和rdist连接起来得到S1和S2。

由于每个末结点对应唯一的中心城市,把表City4和rdist连接起来(基于共同的末结点),从而得到一个包含距离S3和S2的表是不存在问题的。

在上面第3步中我们已经提到,每个始结点可能对应着CntyNEpt中的若干个县城;而一个始结点又对应着rdist中的4个末结点。

因此,表CntyNEpt和rdist的关系将会是多对多的关系,这给我们创建包含S1、S2、S3这三段距离值的数据表带来一个挑战。

在下面第6步中,我们将用欧式距离文件Dist.dbf作为一个模板来实现这个任务。

图2.4(a)-(c)为这一过程的示例,可以方便读者理解。

6.添加直线距离值

在ArcMap中,右键点击欧式距离表Dist.dbf,依次选择JoinsandRelates>RemoveJoin(s)。

这是为了去掉前面操作时连接的一些不必要的数据列。

与第一部分中的第4步类似,两次使用“join”:

将属性表CntyNEpt连接到表Dist.dbf(对应的连接标志分别为FID和INPUT_FID),将属性表city4也连接到Dist.dbf(对应的连接标志分别为:

FID和NEAR_FID)。

注意到属性表得到了更新,即上述第2步计算得到的直线距离值S1和S3添加到了表Dist.dbf中:

CntyNEpt.NEAR_DIST为县城与最近邻结点之间的距离,point:

NEAR_DIST为中心城市与其最近邻结点之间的距离。

图2.4(a)为本步的图示。

7.添加路网距离值

为了将路网距离值rdist连接到表Dist.dbf,我们需要创建一个公共的连接标志linkid用于确定始末结点的唯一铁路路径。

列linkid由始末结点的ID标志组成。

打开INFO表rdist,添加一列linkid(定义类型为“longinteger”)并根据公式linkid=1000*railne-ida+railne-idb计算。

例如,如果railne-ida=198,railne-idb=414,则linkid=198414。

参见图2.4(b)中的左表。

类似地,在表Dist.dbf中添加列linkid并根据公式Dist.linkid=1000*CntyNEpt.NE

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 演讲主持

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1