第七章 数据库操作
你已经拥有了一个初步的地理数据库. 本章的目的是完成数据库的建设, 并使之具有功能. 一个具有功能的项目地理数据库应该包含一系列相关的具有以下特征的COVERAGE:
前面的练习已经做到了这些. 而要使你的地理数据库真正可用, 你还需要:
满足这些要求后, 你的项目中的COVERAGE才具有空间参考.
本章中你将完成土地利用图的更新合并. 你将学习到:
显示用采用真实世界坐标记录的COVERAGE
ARC: ARCPLOT
ARCPLOT: MAPEXTENT SOILS
ARCPLOT: SHAPESET COLOR //指定要使用的填充图案集文件
ARCPLOT: POLYGONSHADES SOILS SUIT SOILS.LUT
ARCPLOT: LINESYMBOL 46
ARCPLOT: ARCS ROADS
ARCPLOT: LINESYMBOL 3
ARCPLOT: LINECOLOR AQUAMARINE
ARCPLOT: ARCS STREAMS
ARCPLOT: LINECOLOR YELLOW
ARCPLOT: ARCS SEWER
ARCPLOT: LINECOLOR GREY
ARCPLOT: POLYGONS LUAT10 //已经存在的土地利用图(缺右下角)
ARCPLOT: LINESIZE .03
ARCPLOT: LINECOLOR 1
ARCPLOT: IDENTIFY LUAT10 POLY * //你可以看到, 面积,周长都是以真实值表示的, 而不是数字化仪单位.
Record | AREA | PERIMETER | LUAT10# | LUAT10-ID | LU-CODE | COST/HA |
21 | 43202.402 | 1461.476 | 21 | 18 | 400 | 20000 |
ARCPLOT: SHOW MAPEXTENT
3868.989, 4437.155, 6281.976, 7516.981
ARCPLOT: POLYGONS LANDAT05 //你什么也看不到, 因为其单位是数字化仪单位, 值落在当前MAPEXTENT之外
ARCPLOT: MAPEXTENT LANDAT05
ARCPLOT: CLEAR
ARCPLOT: POLYGONS LANDAT05
ARCPLOT: SHOW MAPEXTENT
7.1388, 3.1627, 13.5511, 7.7997
ARCPLOT: QUIT
多COVERAGE数据库中的坐标系统
为了能够执行空间分析, 数据库中的所有部分都应该注册到一个坐标系统中来.坐标系统是由椭球体和地图投影决定的. 常用的如UTM (UNIVERSAL TRANSVERSE MERCATOR), ALBERS CONIC EQUAL-AREA, STATE PLANE SYSTEM等等.都是将三维的地球表面投影到平面上来表示.
经纬度: 经纬度是最常使用的地表位置参考系统, 它可以用来表示地球表面上任何一点的位置, 通常使用度分秒来表示. 经纬度是一种地理参照系统, 它不是二维的平面坐标系统. 例如, 经度相差1度, 其之间距离是依纬度变化而变化的, 所以它们不能用来与标准的长度,面积相联系.
平面坐标系统: 平面坐标系统(通常称为笛卡尔坐标系统)在用来在地图上表示真实世界坐标有很多有用的特性:
地理信息系统象平面地图一样, 采用多种平面坐标系统来表达地球表面. 每种坐标系统依据不同的地图投影方法.
地图投影
坐标转换 地图数字化后, 是以数字化仪单位平面坐标中记录的. 为了使其可用, 你必需将其坐标值转换为真实世界坐标中去.
TIC点在数字化地图上的位置以及真实世界坐标值都知道后, 我们就可以利用它们来进行这种转换.典型的TIC坐标是直接采用地图四角的经纬度值, 它们必需先被转换到某种投影中去, 再用来转换数字化的COVERAGE.
COVERAGE坐标转换
TIC表(LANDAT05)
TIC-ID X(经度) Y(纬度) X Y
22 -74.0000 41.0345 -74.0 41.0625
23 -73.5915 41.0345 -73.9875 41.0625
24 -73.5830 41.0345 -73.9750 41.0625
32 -74.0000 41.0300 -74.0 41.0500
33 -73.5915 41.0300 -73.9875 41.0500
34 -73.5830 41.0300 -73.9750 41.0500
第一步: 生成只包含TIC点的空COVERAGE
ARC: &STATION 9999
ARC: USAGE CREATE
USAGE: CREATE <out_cover> {TIC_BND_COVER}
ARC: CREATE GEOREF01 LANDAT05
ARC: LIST LANDAT05.TIC
ARC: LIST GEOREF01.TIC
第二步: 将TIC坐标修改称为经纬度坐标
ARC: INFO
ENTER USER NAME> ARC
ENTER COMMAND> SELECT GEOREF01.TIC
ENTER COMMAND> UPDATE PROMPT
$RECNO> 1
IDTIC = 22
XTIC = 4.614
YTIC = 9.125
IDTIC><CR>
YTIC> 41.0625
$RECNO> 2
.......
$RECNO><CR>
$RECNO IDTIC XTIC YTIC
1 22 -74.0 41.0625
2 23 -73.9875 41.0625
3 24 -73.9750 41.0625
4 32 -74.0 41.0500
5 33 -73.9875 41.0500
6 34 -73.9750 41.0500
ENTER COMMAND> Q STOP
第三步: 定义COVERAGE的坐标系统
ARC: USAGE PROJECTDEFINE
USAGE: PROJECTDEFINE <COVER | GRID | FILE | TIN> <TARGET>
DEFINE PROJECTION
PROJECT: PROJECTION GEOGRAPHIC
PROJECT: UNITS DD
PROJECT: PARAMETERS
ARC:DESCRIBE GEOREF01
..........
coordinate system description
projection GEOGRAPHIC
UNITS DD SPHEROID CLAK186
PARAMETERS:
当前TIC点的坐标是以参考坐标(经纬度)来表示的, 我们需要把它们投影到地图的坐标系统中, 才能进行下一步的坐标转换.
我们采用的地图的坐标投影方式是UTM系统(universal Transverse Mecator). 因此, 我们将要把TIC点坐标由经纬度投影转换为UTM的米单位坐标. 投影转换可以从键盘输入命令方式进行, 也可以采用读入文件方式进行.
ARC: USAGE PROJECT
USAGE: PROJECT
ARC: PROJECT COVER GEOREF01 GEOUTM02
****************************************************************
* THE INPUT PROJECTION HAS BEEN DEFINED *
****************************************************************
USE OUTPUT TO DEFINE THE OUTPUT PROJECTION AND END TO FINISH
PROJECT: OUTPUT
PROJECT: PROJECTION UTM
PROJECT: UNITS METERS
PROJECT: ZONE 18
PROJECT: XSHIFT -580000
PROJECT: YSHIFT -4540000
PROJECT: PARAMETERS
PROJECT: END
ARC:
现在再列出投影后的TIC点坐标:
ARC: LIST GEOUTM02.TIC
RECORD IDTIC XTIC YTIC
1 22 4024.895 5964.872
2 23 5074.965 5976.987
3 24 6125.677 5989.261
4 32 4040.805 4577.147
5 33 5091.074 4589.262
6 34 6141.984 4601.535
同时, 我们可以看到与COVERAGE一起存储的坐标信息也自动地更新, 正确地反映投影后的坐标系统.
坐标系统信息也可以用命令PROJECTCOPY来从一个数据集拷贝到另外一个数据集. 显然, 当有很多相同坐标系统的数据集, 拷贝比一个一个地定义快的多.. 定义坐标信息有利于一些需要坐标比较的分析操作命令如CLIP, INTERSECT的执行.
第五步 将COVERAGE从数字化坐标转换到真实世界坐标
TRANSFORM命令可以进行投影转换和仿射转换. 仿射转换是根据三个或三个以上TIC点来计算出输出COVERAGE在比例尺, X偏移, Y偏移, 以及任何可能的旋转变换.
在进行转换之前, 我们需要先生成一个只包含投影后的TIC点的空COVERAGE.
ARC: USAGE CREATE
USAGE: CREATE <OUT_COVER> {TIC_BND_COVER}
ARC: CRETE LANDTR06 GEOUTM02
这样, 我们将以LANDAT05作为输入COVERAGE, 其单位是数字化仪单位, 输出COVERAGE为LANDTR06, 其单位是真实世界坐标(UTM投影).
ARC: USAGE TRANSFORM
USAGE: TRANSFORM
ARC: TRANSFORM LANDAT05 LANDTR06
TRANSFORMING COORDINATES FOR COVERAGE LANDAT05...
TRANSFORM生成并显示结果报告, 包括输出COVERAGE的TIC, 转换参数, 两个COVERAGE匹配的误差.
SCALE (X,Y) = (246.145, 245.874) SKEW (DEGREES = (-0.037)
ROTATION (DEGREES) = (0.347) TRANSLATION = (2903.706, 3714.036)
RMS ERROR (INPUT, OUTPUT) = (0.006, 1.522)
AFFINE X = AX + BY + C
Y = DX + EY + F
A = 246.141 B = -1.648 C = 2903.706
D = 1.489 E = 245.868 F = 3714.036
TICID INPUT X INPUT Y
OUTPUT X OUTPUT Y X ERROR Y ERROR
22 4.614 9.125
4024.895 5964.872 -0.531 -0.419
.........................
如果RMS误差比较高(如大于0.005英寸), 说明:
ARC: DESCRIBE LANDTR06
如果你遭遇到大的RMS误差, 需要删除生成的COVERAGE,仔细查出原因.
ARC: KILL GEOUTM02 //一旦删除就没有办法恢复
合并相邻地图
通常, 每个数据层的地图都是由很多幅相邻的地图组成的. 在开始建立COVERAGE时候, 我们一般都采用边界来代表地图的边界. 但是, 完成前面的工作以后, 相邻的COVERAGE应该被合并称为一个完整的COVERGE, 起先的地图边界应该被消去.
合并地图的第一步工作通常是要检查相邻的COVERGE特征在边界处是否很好地吻合. 这可以通过绘制出同比例尺的地图来与相邻地图比较完成, 也可以在ARCPLOT下生成不同的地图来比较相邻的COVERAGE.
现在我们将合并原有的土地利用图LUAT10和新生成的LANDTR COVERAGE.
第一步: 比较检查相邻的COVERAGE
在合并地图之前, 需要确保所有在相邻边界上的特征很好地吻合, 属性项名字和定义应该完全相同, 相连通的特征的属性值也应该相同.
ARC: ARCPLOT
ARCPLOT: MAPEXTENT LANDTR
ARCPLOT: ARCS LUAT10
ARCPLOT: LINESYMBOL 2
ARCPLOT: ARCS LANDTR
可以看到LANDTR和LUAT10部分地重叠. 这是因为我们数字化时候向外延伸了约3毫米.
ARCPLOT: LINESYMBOL 3
ARCPLOT: ARCS CLIPCOV //CLIPCOV定义了LANDTR的外边界. 它应该能够准确地与原有底图重叠, 通常采用拷贝生成或用真实坐标GENERATE生成)
ARCPLOT: QUIT
ARC:
第二步: 接边COVERAGE准备 LANDTR与LUAT10重叠的部分需要删除掉, 我们使用CLIP命令来完成.
ARC: USAGE CLIP
USAGE: CLIP <
ARC: CLIP LANDTR CLIPCOV LANDCP07 POLY
CLIPPING LANDTR WITH CLIPCOV TO CREATE LANDCP07.
SORTING...
INTERSECTING...
ASSEMBLING POLYGONS...
CREATE NEW LABELS...
CREATING DRIVE>:\YOURNAME\LAND\LAND07.PAT...
ARC: COPY LANDCP07 LANDEM08 //使用拷贝来进行下一步工作EDGEMATCH
下面使用ARCEDIT来看看CLIP的结果:
ARC: ARCEDIT
ARCEDIT: EDIT LANDEM08
ARCEDIT: DRAWENVIRONMENT ARC NODE
ARCEDIT: DRAW
ARCEDIT: BACKCOVERAGE LUAT10 4 //采用LUAT10作为背景来显示
ARCEDIT: BACKENVIRONMENT ARC NODE
ARCEDIT: DRAW
可以看到, 现在超出边界的部分已经被完全裁去.
第三步: 匹配相邻的COVERAGE EDGEMATCH是用来匹配边界上的将要连接的坐标点. 通过匹配操作, 弧段和多边形边界和地图角点可以准确地定位并与相邻地图上相应特征生成连接(LINK).LINK是用相应的点位之间的一个橡皮线来表示, 通过它来精确地使弧段相连接.LINK也是一种特征, 可以进行编辑:
ARCEDIT: EDITFEATURE LINK
ARCEDIT: DRAWENV LINK
ARCEDIT: DRAW
你也可以使用放大的办法来观察LINK.
接边菜单
ARCEDIT: EDGEMATCH
在出现的对话中, 指定:
EDIT COVERAGE: LANDEM08
EDIT COVERAGE FEATURE CLASS THAT WILL BE ADJUST: NODE
SNAP COVERAGE: LUAT10
SNAP COVERAGE FEATURE CLASS: NODE
APPLY....
屏幕上显示出EDGEMATCHING MENU, 通过它, 你可以设置环境(改变LINK特征和显示环境), 添加或删除LINK特征, 定义添加LINK的区域, 执行调整, 取消操作, 以及保存结果.
选择SNAP ENVIRONMENT, 将捕捉距离设置为10, 捕捉类型设置为CLOSEST.
添加本身连接(IDENTITY LINK) 在执行调整之前, 本图还有两个角点需要设置为连接. 这两个角点位置不能改变, 才能使边界完全匹配.
选择SETTINGS下的LINK FEATURES..., ,指定EDIT COVERAGE和SNAP COVERAGE的连接特征为ARC. APPLY.
现在选择ADD INTERACTIVELY. 屏幕上出现如下菜单:
----------------option-------------------------------------------
1) Free point 2) Snap point 3) Set symbol
5) Delete link 9) Quit
现在我们是要添加IDENTITY LINK, 即起点和终点完全相同的连接.根据屏幕提示:
Position the cursor over the corner where the identity link is to be added.
将鼠标移动到点位上, 不要移动, 两次点击右键, 选定起始点(同一点).如果你操作没有失误的话, 角点处将出现一个矩形框, 同时对话区中会显示出连接信息:
Link #13 :(4735.561,5109.521) , (4735.561,5109.521)
可以看到, 起点终点都是同一点.同样处理另外一个角点.
如果你操作失误, 请先按9键退出, 再选择DELETE MANY, 根据提示操作后再次选择ADD INTERACTIVELY.
操作完成后, 确认无误, 选择ADJUST, 系统将根据生成的连接进行弧段和标签点的调整:
Adjusting coverage LANDEM08
Building the adjustment structure from the links for the first pass...
Proximal tolerence set to 1.000...
Generating convex hull...
Building Triangualr Irregular Network...
adjusting arcs...
adjusting labels...
完成后, 通过缩放操作来检验坐标调整工作.然后, 选择SAVE来保存你所作的变动. 最后, 关闭接边菜单, 返回到ARCEDIT.
ARCEDIT: QUIT
ARC: USAGE BUILD //准备重新建立拓扑结构
USAGE: BUILD
ARC: BUILD LANDEM08 POLY
ARC:
第四步: 检查相应的属性项定义是否相同
ARC: ITEMS LUAT10.PAT
COLUMN NAME ITEM NAME WIDTH OUTPUT TYPE N.DEC ALT
1 AREA 4 12 F 3 -
5 PERIMETER 4 12 F 3 -
9 LUAT10# 4 5 B - -
13 LUAT10-ID 4 5 B - -
17 LU-CODE 3 3 I - -
20 COST/HA 6 6 I - -
ARC: ITEMS LANDEM08.APT
COLUMN NAME ITEM NAME WIDTH OUTPUT TYPE N.DEC ALT
1 AREA 4 12 F 3 -
5 PERIMETER 4 12 F 3 -
9 LANDEM08# 4 5 B - -
13 LANDEM08-ID 4 5 B - -
17 LU-CODE 3 3 I - -
20 COST/HA 6 6 I - -
可以看到, COVER-ID, LU-CODE, COST/HA都是相同的项定义, 所以这两个COVERAGE可以合并.
如果你的COVERAGE项定义有不同之出, 需要修改, 参照下列命令:
第五步: 相邻图幅的合并 前面的工作保证相邻的图幅拼接处弧段完全对准, 下面将要进行的是将相邻图幅合并称为一个COVERAGE
ARC: USAGE MAPJOIN
USAGE: MAPJOIN
我们需要保持生成的COVERAGE的USER-ID的不重复性, 所以ID偏移选项{NONE | FEATURES | TICS | ALL}用来选择新生成的COVERAGE中特征的用户ID安排方式.我们的COVERAGE(LUAT10和LANDEM08)中多边形的用户编号已经是不重复的了, 而且TIC点都是来自于同一套TIC, 所以TIC点用户ID也没有必要设置偏移.
ARC: MAPJOIN LANDMJ09 POLY
ENTER COVERAGES TO BE MAPJOINED (TYPE END OR A BLANK LINE WHEN DONE);
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ==================
ENTER THE 1ST COVERAGE: LUAT10
ENTER THE 2ND COVERAGE: LANDEM08
ENTER THE 3RD COVERAGE: END
APPENDING COVERAGES....
SORTING....
PARTIAL PROCESS ENABLED. 43% OF THE COVERAGE WILL BE PROCESSED.
INTERSECTING...
ASSEMBLING POLYGONS...
CAREATING PAT...
ARC: ARCPLOT //进入ARCPLOT来观察生成的结果
ARCPLOT: MAPEXTENT LANDMJ09
ARCPLOT: ARCS LANDMJ09
可以看到, 地图的边界线仍然存在. 显然, 我们需要消除这些多余的边界线.你可以使用DROPLINE命令在ARCPLOT图形环境下可视化地删除多余的边界线:
ARCPLOT: CLEAR
ARCPLOT: LINECOLOR 6
ARCPLOT: TEXTSIZE .075
ARCPLOT: USAGE DROPLINE
USAGE: DROPLINE
ARCPLOT: DROPLINE LANDMJ09 LU-CODE
//使用土地利用类型来作为消除边界的项, 即相邻的多边形如果其LU-CODE值相同, 其共同的边界线将被移去.
注意, DROPLINE命令只是可视化地消去相邻多边形的共同边界, 而真正修改COVERAG, 要使用DISSOLVE命令.
第六步: 消除地图中的边界线
ARCPLOT: ARC USAGE DISSOLVE //ARC表示后面的命令是在ARC模块中
USAGE: DISSOLVE
ARCPLOT: ARC DISSOLVE LANDMJ09 LANDDS10 #ALL
DISSOLVING LANDMJ09 BY #ALL TO CRETE LANDDS10
CREATING LANDDS10.PAT
FORMAT...
CREATING DISSOLVE TABLE...
NUMBER OF POLYGONS (INPUT, OUTPUT) = 81 77
NUMER OF ARCS (INPUT, OUTPUT) = 321, 207
CREATING LANDDS10.PAT...
ARCPLOT: CLEAR //准备检验结果
ARCPLOT: MAPEXTENT LANDDS10
ARCPLOT: ARCS LANDDS10
ARCPLOT: Q
你已经完成了数据库的建立工作!!保存并备份你的数据库, 以准备进入下一步的空间分析操作.
本章结束