第五章 修改空间数据

前面你已经生成了你地图底稿的数字化版本, 现在你需要使你的数字数据没有空间错误. 具体地, 你需要确保:

这些关系, 也就是拓扑关系, 可以数字化地表明我们所看到的底图上个各特征之间的关系. 在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  <driver>:\YOURNAME\LAND

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: <cr>(使用缺省的图例)

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> {ALL | DANGLES | PSEUDOS}

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采用特征定向的编辑方法, 主要有四步:

  1. 指定要编辑的是哪个COVERAGE
  2. 指定要编辑修改的特征类型
  3. 具体选择要修改的特征
  4. 编辑修改被选择的特征

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

修改操作的顺序是比较重要的一个问题.仔细考虑一下, 并参考下面的顺序:

  1. 添加缺失的标签点
  2. 添加缺失的弧段 (重新建立拓扑关系)
  3. 修改出头错误
  4. 修改欠头错误
  5. 修改未闭合的多边形
  6. 修改标签错误(多余的标签, USER-ID错误)

在添加缺失的弧段时, 你需要重新输入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

 

本章结束