第五章 修改空间数据
前面你已经生成了你地图底稿的数字化版本, 现在你需要使你的数字数据没有空间错误. 具体地, 你需要确保:
这些关系, 也就是拓扑关系, 可以数字化地表明我们所看到的底图上个各特征之间的关系. 在ARCINFO中, 建立拓扑关系同时也就建立了用来保存描述性属性的特征属性表. 一旦这些关系明确了, 你就可以查询, 分析和显示你的数据.
在本章中, 你将看到:
空间数据修改的步骤
即使你非常细心, 你也难以确保每条数字化的线条都很完美. 要使你的空间数据可以用于以后的分析,你需要修正所有的错误并使拓扑关系正确. 这是通过建立已有的空间关系(拓扑关系), 识别错误, 修改错误, 然后重新建立拓扑关系. 本章就逐一介绍这些过程.
多边形数据的修改 本章继续处理前面数字化得到的土地利用COVERAGE.
第一步: 建立拓扑关系
拓扑关系可以使你明确地理特征之间的相互关系, 建立拓扑关系可以识别数字数据中的这些错误:
建立拓扑关系时可以生成弧段交点, 识别哪些弧段构成多边形, 将标签点与多边形相连接, 从而可以识别以上错误.在你建立拓扑关系之前, 多边形是不存在的, 弧段相交处也没有交点. 建立拓扑关系的命令有:BUILD和CLEAN.
第二步: 识别错误
一旦你建立拓扑关系后, 你可以绘制出一张图来和原底图叠合比较, 识别最常见的数字化错误.
ARCINFO使用特殊的符号代号来标志潜在的节点错误.
通常的标签错误有: 多边形中没有标签点或多于一个标签点.后者可能是由于标签点太多或者多边形太少造成的. 尽管有时候会在一个多边形中误置两个或更多标签点, 更多的情况是由于弧段欠头造成多边形不闭合形成的.所以通常应该先修改节点(弧段)错误.
建立拓扑关系以后, ARC中的命令NODEERRORS, LABELERRORS能够自动识别这些错误形式.其它的错误(如标签点USER-ID错误, 弧段遗漏, 弧段数字化失误造成线条形状失真等)必需靠仔细对照检查数字数据和底图来发现.
第三步: 修改错误
修改错误是建立数据库过程中的一个重要过程.只有消除所有的数据错误, 你以后的计算,分析和制图才有实际价值. 比如, 没有标签点的多边形不能够有附加的属性数据, 没有闭合的多边形的面积显然是不正确的, 等等.
修改错误简单地说, 就是补充遗漏的数据, 删除多余的数据, 重置不准确的数据.
错误类型 | 措施 |
缺失弧段 | 添加 |
缺失标签点 | 添加, 修改USER-ID |
多于一个标签点 | 删除不正确的 |
多边形未闭合 | 确定哪个节点该移动, 哪条线段该延伸 |
出头错误 | 确定是否该删除 |
USER-ID错误 | 修改USER-ID |
第四步 重新建立拓扑关系
对COVERAGE数据的修改改变了它的拓扑, 因此, 你必需重新建立拓扑关系来正确反应这种变化了的拓扑结构.重新建立拓扑关系后, 你需要再次重复第二步, 如有必要, 第三第四步, 直到没有错误为止.
建立拓扑结构
要确定COVERAGE中特征之间的空间关系, 你就需要建立拓扑关系. ARCINFO为每个特征赋予一个内部编号, 然后用这个内部编号来判断弧段的连接性和多边形的邻接性. 这些关系计算好后, 将被存储于特征属性表中.
特征属性表
特征属性表是与特征类型相联系的INFO表格. 建立多边形拓扑关系时将建立PAT, 弧段拓扑时生成AAT, 点拓扑时生成PAT.
特征属性表都有其模板, 即有其标准的项. 点和面特征属性表的模板相同, 包含的标准项为: AREA, PERIMETER, COVER#(系统内部编号), COVER-ID. COVER代表具体的COVERAGE名.
标准的AAT表标准项有: FNODE#, TNODE#, LPOLY#, RPOLY#, LENGTH, COVER#(系统内部编号), COVER-ID.
BUILD命令与CLEAN命令的异同
ARCINFO中建立拓扑关系的命令有BUILD和CLEAN. 尽管这两个命令都执行建立拓扑关系和生成特征属性表的操作, 它们之间有着重要的差别. BUILD可以用于建立点, 线, 面, 节点, 标注的拓扑关系, 而CLEAN执行坐标修改和建立特征属性表, 只能用于线和面.
你在为线或面COVERAGE建立拓扑关系时使用BUILD还是CLEAN取决于你数字化时采用的方法. BUILD只认识已有的交点(单独数字化), 而CLEAN在所有的相交处生成节点(连续数字化).
BUILD命令假设所有的坐标数据都是正确的, 即它不会修改已有的坐标值, 而CLEAN命令在弧段相交处生成节点. 而且, CLEAN命令还利用指定的容限来修正出头和欠头错误.
基于两个命令的不同之处, 你必需根据你的情况来决定采用哪个命令. ARCEDIT模块下也有这两个命令, 且有一些另外的功能(修正标签点错误).
练习: 建立多边形拓扑关系
ARC: &WORKSPACE
ARC: LISTCOVERAGES
ARC: INTERSECTERR LANDDG01
(用来确定COVERAGE是否含有相交弧段)
ARC: USAGE CLEAN
USAGE: CLEAN
{OUT_COVER} {DANGLE-LENGTH} {FUZZY_TOLERANCE} {POLY | LINE}
前面提到过, 我们应该保存原来的COVERAGE, 因此, 使用CLEAN时最好指定OUT_COVER, 或者先拷贝原来的COVERAGE, 再使用CLEAN命令.
当建立拓扑关系时候, 我们希望能够消除明显的悬挂弧段错误(出头). 因此, 指定合适的DANGLE_LENGTH是很有必要的. 我们数字化时可能的出头一般不超过0.25厘米, 或0.1英寸.
ARC: CLEAN LANDDG01 LANDCN02 0.1
ARC:USAGE LIST
USAGE: LIST
<in_cover> {FROM} {TO} {ITEM...ITEM}
ARC: LIST LANDDG02.PAT
所有多边形的属性将显示在屏幕上. 一旦标准的PAT表建立以后, 你就可以在其上添加其它属性项来存储你需要的属性.
现在的单位还是地图单位, 即英寸或厘米.注意内部编号为1, 用户号码为0的多边形, 这代表外多边形, 表示所有特征以外的部分, 其面积以其它特征面积之和的负值表示.
识别数字化错误
现在可以开始寻找数字化过程中产生的错误了.
首先, 你也许需要制作一张反应你数字化数据的地图.我们将使用ARC下的EDITPLOT命令来生成一个包含有你需要识别的错误的图形文件.
ARC: USAGE EDITPLOT
USAGE: EDITPLOT
<in_cover> {OUT_GRAPHICS_FILE} {SCALE_DENOMINATOR}
ARC: EDITPLOT LANDCN02
WINDOW PLOT? NO (表示你要看整个图面)
ENTER LEGEND TEXT:
PLOT TICS? YES (显示所有边界内TIC及其ID)
PLOT ONLY POLYGONS WITH LABEL ERRORS? NO (你需要显示所有的多边形)
PLOT ARCS? YES
PLOT ARC IDS? NO
PLOT LABEL POINTS? YES
PLOT NODE ERRORS? YES (显示错误的节点)
ARC: (命令完成, 生成.GRA文件).
ARC: &SYS DIR /W
ARC: &STATION 9999
ARC: DRAW LANDCN02.GRA (在屏幕上显示)(你可以缩放窗口来仔细查看. 回车结束)
如果你的系统与绘图机相连, 你可以用PLOT命令生成一份硬拷贝(即绘制出地图).这份地图可以用来与底图重叠, 以检查数据的输入质量.
使用NODEERRORS, LABELERRORS命令, 你可以生成潜在错误的列表报告. 同时你可以将输出结果保存在一个WATCH文件中, 然后打印出来, 以便与屏幕上的图形配合比较查错.
ARC: &WATCH NODE.ERR //开始生成并打开观察文件, 取名为NODE.ERR
ARC: USAGE NODEERRORS
USAGE: NODERRORS <cover>
ARC: NODEERRORS LANDCN02 ALL
PSEUDO NODE 8 AT ( 13.22821, 7.50828)
PSEUDO NODE 16 AT ( 8.96204, 6.54644)
DANGLING NODE 18 AT ( 12.68590, 5.39125)
......
TOTAL NUMBER OF PSEUDO NODES: 5
TOTAL NUMBER OF DANGLING NODES: 4
ARC: &WATCH &OFF //注意一定要关闭WATCH文件
同样, 使用LABELERRORS命令:
ARC: &WATCH LABEL.ERR
ARC: USAGE LABELERRORS
USAGE LABELERRORS
<cover>
ARC: LABELERRORS LANDCN02
POLYGON 1 HAS 0 LABEL POINTS.
POLYGON 15 HAS 2 LABEL POINTS.
LABEL USER ID: 69
LABEL USER ID: 59
.......
ARC: &WATCH &OFF
注意, 多边形1(内部编号)没有标签点是正确的, 它代表的是外多边形.其他的你都需要检查是否错误.
一个空间关系正确的多边形COVERAGE显然可以包含假节点, 但不能有悬挂节点; 也只能是外多边形没有标签点, 其它的标签点错误都是不容许的.
当你需要的时候, 你可以查看显示这些错误信息:
ARC: &POPUP LABEL.ERR
如果你的计算机与打印机相连, 你就可以将观察文件打印出来.
你还可以用ARCPLOT生成特殊的编辑图. 使用下面的命令:
ARC: ARCPLOT
ARCPLOT: DISPLAY 1040
ENTER ARE/INFO GRAPHICS FILENAME: MYERRORS
ARCPLOT: MAPEXTENT LANDCN02
ARCPLOT: MAPSCALE 1
ARCPLOT: ARCS LANDCN01
ARCPLOT: MARKERCOLOR RED
ARCPLOT: NODEERRORS LANDCN02
ARCPLOT: TEXTCOLOR GREEN
ARCPLOT: NODES LANDCN01 IDSONLY
ARCPLOT: MARKERCOLOR BLUE
ARCPLOT: LABELERRORS LANDCN02
ARCPLOT: QUIT
用ARCEDIT来修改空间错误
识别和确认错误以后, 你就需要开始用ARCEDIT来修改空间错误了. 除数字化功能外, ARCEDIT还有非常多的功能. 下面介绍的是一些基本的边界操作命令的使用.
ARCEDIT采用编辑环境和特征定向的编辑方式.一些命令用来确立编辑环境, 告诉ARCEDIT将使用哪些硬件设备, 编辑哪个COVERAGE, 修改哪种特征, 显示哪些特征.同时, 为提高效率, ARCEDIT采用特征定向的编辑方法, 主要有四步:
ARC: COPY LANDCN02 LANDED03
ARC: ARCEDIT
ARCEDIT: &STATION 9999 //如果需要的话
ARCEDIT: COORDINATE MOUSE
帮助: 如果你命令输入错误(拼写错误), 系统会作出相应提示, 你只需要重新输入命令即可:
ARCEDIT: EDIT LANDED.PAF IFNO
USAGE: EDIT
<cover> {FEATURE_CLASS} USAGE: EDIT
<info_file> INFO
ARCEDIT: EIDT
UNRECOGNIZED COMMAND.
ARCEDIT:
ARCEDIT: MAPEXTENT LANDED03 //如果你不设置MAPEXTENT, 将采用缺省的值, 即要编辑的COVERAGE的BND
ARCEDIT: EDIT LANDED03
THE EDIT COVERAGE IS NOW
<cover>:\YOURNAME\LAND\LANDED03
ARCEDIT:DRAWENVIRONMENT ARC NODE LABEL
帮助: 有的命令你很难记住, 你可以随时列出这些命令以及它们的简写法(大写字母);
ARCEDIT: COMMANDS D //列出以D开头的命令
DISPlay DrawEnvironment DrawOrder DrawSelect .......
当你熟悉这些命令后, 你通常会采用简写的命令.
ARCEDIT: DRAW
ARCEDIT: NODECOLOR NODE RED //增强显示效果
ARCEDIT: DRAW
ARCEDIT: DRAWENVIRONMENT NODE ERRORS LABEL OFF //增强显示效果
ARCEDIT: DRAW
ARCEDIT: EDITFEATURE ARC
ARCEDIT: SELECT MANY
1 = SELECT 2 = NEXT 3 = WHO 9 = QUIT
经常, 你需要放大显示某一区域, 以便观察或选取目标, 你可以:
ARCEDIT: MAPEXTENT * //*表示你将指定新的显示范围, 用鼠标拖出一个矩形框包含你需要显示的部分
ARCEDIT: DRAW
当你需要重新显示整个区域时:
ARCEDIT: MAPEXTENT LANDED03 //或者 MAPEDTENT DEFAULT //或者使用窗口的ZOOM IN/OUT来进行
ARCEDIT: DRAW
进行编辑:
弧段:对于出头悬挂的弧段, 你显然不需要它, 选择后删除即可:
ARCEDIT: SELECT BOX //用矩形框来选择, 不需要放大显示即刻很容易地进行
ARCEDIT: ASELECT BOX //继续进行选择
ARCEDIT: ASELECT BOX ......
ARCEDIT: DELETE //完成选择后删除这些悬挂弧段
开始最好一条一条的进行, 因为你可以使用OOPS命令翻悔一次(仅仅一次!)操作. 其它的相关命令还有: MOVE, ADD, COPY.
欠头错误: 延伸弧段即可(PC ARCINFO中不支持)
ARCEDIT: USAGE EXTEND
USAGE: EXTEND {BOTH | FROM | TO} {* | DISTANCE}
ARCEDIT: SELECT
ARCEDIT: EXTEND
ENTER FIRST POINT DEFINING THE DISTANCE
ENTER SECOND POINT DEFINING THE DISTANCE
1 ARC(S) EXTENDED.
标签: 同样要选择后进行编辑;
ARCEDIT: EDITFEATURE LABEL
ARCEDIT: DRAWE LABEL IDS
ARCEDIT: DRAW
ARCEDIT: SELECT
ARCEDIT: DELETE
ARCEDIT: ADD
1)ADD LABEL 5)DELETE LAST LABEL
8)DIGITIZING OPTIONS 9)QUIT
(LABEL) USER-ID: 78 COORDIANTE = 1000
......
ARCEDIT: SELECT
ARCEDIT: CALCULATE $ID = XXX //新的正确的USER-ID值)($ID用于代替USER-ID, 即LANDED03-ID, 当然你也可以使用LANDED03-ID
节点: 对节点最常用的操作是移动. 节点总是与弧段一起的. 移动节点也在修改弧段. 节点不能先选择.
ARCEDIT: EDITFEATURE NODE
ARCEDIT: MOVE
POINT TO THE NODE TO MOVE <9 to quit>
ENTER POINT //选择到需要移动的节点, 按1键)
NODE (11.464, 4.137) SELECTED.
1 = SELECT 2 = NEXT 3 = WHO 4 = MOVE 9 = QUIT
按4键
POINT TO WHERE TO MOVE THE NODE <4-RESTAT, 9-QUIT>
ENTER PONT
指定新的位置, 按1键
......
如果需要在弧段某处生成新的节点, 可以:
ARCEDIT: SELECT
ARCEDIT: SPLIT //根据提示继续操作
......
ARCEDIT: SAVE //请随时注意保存你的结果
ARCEDIT: QUIT
修改操作的顺序是比较重要的一个问题.仔细考虑一下, 并参考下面的顺序:
在添加缺失的弧段时, 你需要重新输入TIC点位, 注意其顺序以及准确对准. 务必使RMS控制在允许的范围之内.
ARCEDIT: COORDINATE DIGITIZER LANDED03
DIGITIZE A MINIMUM OF 4 TICS.
SIGNAL END OF TIC INPUT WITH TIC-ID = 0
TIC-ID: 22* ......
TIC-ID: 0*
SCALE (XY) = (0.999, 1.001) SKEW (DEGREES) (-.019)
ROTATION (DEGREES) = (-0.052) TRANSLATION = (-0.007, -0.007)
RMS ERROR (INPUT, OUTPUT) = (0.004, 0.004)
ARCEDIT:
环境设置中的捕捉命令:
ARCSNAP: 在添加弧段过程中, ARCSNAP可以缩短或延长新添加的弧段使之准确与已有弧段相连接.
NODESNAP: 确保新添加的弧段与已有的弧段节点相连接. 指定适当的捕捉距离.
ARCEDIT: USAGE ARCSNAP
USAGE: ARCSNAP ON {* | DISTANCE}
USAGE: ARCSNAP OFF
ARCEDIT: ARCSNAP ON .02
ARCEDIT: USAGE NODESNAP
USAGE: NODESNAP <FIRST | CLOSEST | OFF>
{DEFAULT | * | DISTANCE}
ARCEDIT: NODESNAP CLOSEST .02
你也可以指定弧段相交处是否自动生成新的节点.
ARCEDIT: USAGE INTERSECTARCS
USAGE: INTERSECTARCS <off | add | all>
ARCEDIT: INTERSECTARCS ALL
重新建立拓扑关系:
ARC: COPY LANDED03 LANDBD04
ARC: BUILD LANFBD04 POLY
BUILDING POLYGONS....
PARTIAL PROCESSING ENABLED. 93% OF THE COVERAGE WILL BE PROCESSED.
ARC:
由于修改只是针对COVERAGE的一部分, 所以BUILD也只进行相应的部分处理.
你需要自己觉定是否应该采用BUILD命令还是CLEAN命令. 现在再次查找错误:
ARCEDIT: NODEERRORS LANDBD04 ALL
ARC: LABELERRORS LANDBD04
ARC: LIST LANDBD04.PAT
需要保证只有假节点错误, 只有外多边形没有标签点, 没有其它标签点错误, PAT中列出的多边形数应该等于你底图的多边形数加1.
完成所有的错误修改后, 你的COVERAGE就可以用于空间分析了. 当然, 我们还会需要添加属性数据等.
编辑线COVERAGE:
ARC: COPY STRMGN01 STRMBD02
ARC: BUILD STRMBD02 LINE
ARC: LIST STRMBD02.AAT
注意FNODE和TNODE号全是0. 这显然并不是我们期望的, 这是由于我们是从文本文件来生成COVERAGE的, 而非数字化来的. 因此, 我们需要:
ARC: USAGE RENODE
USAGE: RENODE
<cover> {FROM_NODE_ELEV_ITEM} {TO_NODE_ELEV_ITEM}
ARC: RENODE STRMBD02
119 UNIQUE NODES BUILT FOR STRMBD02
ARC: LIST STRMBD02.AAT
确认和识别错误:
ARC: INTERSECTERR STRMBD02
应该是0, 表示没有不通过节点相交的弧段.
ARC: ARCEDIT
ARCEDIT: &STATION 9999
ARCEDIT: EDIT STRMBD02
ARCEDIT: DRAWE ARC INTERSECT NODE ERRORS
ARCEDIT: DRAW
..........
ARCEDIT: QUIT
本章结束