关于上海市地形图入数据库前的检查
关于上海市地形图入数据库前的检查
作者:徐炳宽
来源:《新农村》2010年第09期
摘 要:利用AutoLisp 编制的程序, 对CASS 绘图软件检查后遗漏的无属性实体进行二次检查, 使提交成果的图上实体无遗漏漏属性。
关键词:AutoCAD AutoLisp 非图形数据库
一、引言
上海市测绘院从2004年在全国率先开始进行基础地理信息系统数据采集与数据库建立工程, 城市地形图由原来的线划图转换成附有属性的信息化地形图。目前, 上海市区2千平方公里折合10187幅, 已完成1:500信息化地形图的测绘和建库, 并且每半年进行一次更新测绘。 目前, 应用型GIS(如电力GIS 、电信GIS 和城市网格化管理系统等) 数据采集是测绘技术应用的主要领域。与GIS 数据采集最密切的测绘技术是数字化测图技术, 它们的最大区别是, 前者在采集地理实体几何数据的同时, 还要调查其属性信息。 另外, 为了保证采集数据的可靠性和完整性, 为GIS 采集的数据必须经过检验和进一步的处理才能进入GIS 数据库。
二、问题与思考
在信息化地形图上, 每个实体都根据不同的类别而加了属性。 这样有利于数据的分类, 管理和查询。然而, 在编辑属性过程中, 对于较小的实体作业人员难免不出现一些疏漏, 这样, 就直接影响产品质量, 使其无法入库。
为控制产品质量,CASS 软件提供了检查无属性实体的程序。它能把检查出来的无属性实体变虚线表示。但是, 很小的实体如围墙、栅栏的碎线和表示门牌的符号“*”变虚后, 作业员在图上很难找到它们, 就这样遗漏属性的实体不得不产生了。
针对这个问题, 笔者用AutoLisp 编写了检查无属性实体的程序, 用它对地形图进行二次检查, 该程序能找到图中缺属性的实体, 并以醒悟颜色画的“圆”圈起来。圆心点对应的就是无属性实体。作业员就会很轻松地找到这些无属性实体, 添加上相应的属性, 使图上没有漏添属性的实体。
三、编程思路和要点
在程序中, 建立选择集对每个实体(点、线、面) 进行过滤, 提取每个实体的属性列表, 看看这些数据中必添属性项是否为空, 为空的就是无属性实体, 画圆标定这些实体。
在上海市基础地形图中, 实体的属性是附加在实体的非图形数据中, 下面画线部分就是围墙和楼高的非图形数据, 围墙:((-1 . ) ……(0 . "LWPOLYLINE")……(8 . "WALL")…… (10 2065.61 1738.8) …… (210 0.0 0.0 1.0) (-3 ("smi" (1000 . "霍山路第一小学"); 楼高:((-1. )…… (0 .
"INSERT")……(8 . "BUILDING_H") ……(10 2085.92 1756.57 0.0) 0) (-3 ("smi" (1070 . 10) (1040 .
4.11) (1040 . 1769.57) (1040 . 2079.5) (1040 . 53.26) (1040 . 62.61) (1040 . 53.26) (1000 . "中国联通上海分公司") (1000 . "溧阳路255") 。
编程要点是如何检索出实体的属性列表中, 用户附加的非图形数据。由于南方公司为上海开发的CASS 绘图软件是加密的, 所以查不到非图形数据的应用名, 没有应用名就查不到非图形数据。查出应用名的方法是把*.DWG文件转成*.DXF的数据交换文件, 在这个文件里就可以查到非图形数据的应用名“smi”。由应用名”smi”为索引就可以检索出实体的非图形数据。
四、检查方法
在程序运行时, 检索出属性列表中的(1000 . "霍山路第一小学") 项, 其中" 霍山路第一小学" 这项是围墙的属主。如果这项为空, 就是无属性实体, 就不符入库方要求。对图上所有的实体进行过滤, 检索出无属性的实体, 作业员就可把属性加入到实体当中。
五、程序实现
(defun c:jcsx ();检查无属性实体
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(command "-layer" "m" "检查" "c" "6" );建立检查层
(setq n 0)
(setq ss (ssget'((-4 . "
(-4 . "
"and>") ;过滤墙层
(-4 . "");过滤门牌号
......
(-4 . "or>")))
)