一种从CAD图形数据反演管线探测数据的方法
2014-02-19牛建军
牛建军,胡 菡,陈 玲
(1.湖北省测绘工程院,湖北 武汉 430074)
目前,很多城市的管线数据是以图形形式存储的,多为*.dwg数据。管线入库对数据有很多严格的要求:管线和管点之间需要严格的对应关系;每个管点有必要的属性与之关联;每个管段也有必要的属性与之关联等,而这些都是CAD图形数据无法满足的[1]。必须将图形数据以自动化的方式转换成需要的形式以便于管线数据的入库,同时更好地保存管线、管点的连接关系以及管线和管点的属性,使得管线数据存储和获取更便捷、利用率更高、空间分析更有效。
1 反演方法
1.1 前期数据整理
由于原始数据除包含管线相关数据外,还可能包含各类基础要素,并且数据分层较混乱。为了将管线数据较好地分离、分类出来,首先将不需要的数据剥离,保留下来的数据有管线、管点块、管线注记、管点注记、全图高程点及注记、其他可能用到的块和注记。将管线数据分离出来后,查看管线、管点块、全图高程的完整性、正确性。将某些不合要求的块重新插入,并尽量保证块名称的一致性。全图高程方面,部分图幅的高程点Z坐标信息错误,需要依赖其高程注记来读取高程信息。最后,检查全图管线注记与管点的位置关系是否正确,检查全图的悬挂情况,并作相应处理。
1.2 CAD数据转换为探测数据表
将CAD数据反演为探测数据表的步骤如下:①按照管线相关层分层读取管线数据。②每条管段按节点读取,每个节点为一个管点。③每个管点在其附近搜索三类实体:注记实体,用于读取管点的说明,其中可能包括管线类型、管径、埋深、材质等;管点块,用于读取管点类型,如消火栓、阀门、入地口等;高程点或高程注记,通过高程点信息读取管点的地面标高。④按探测表结构逐条记录CAD图形中的管段、管点数据及其对应属性,生成探测数据表。
在不考虑“组分类型”、“埋深”、“管径”等属性的情况下,如果只转换空间信息,则主要代码如下:
string code_former = "";//用于保存“上点号”
for (int k = 0; k < pl.NumberOfVertices; k++)
{
double x1 = pl.GetPoint3dAt(k).X;
double y1 = pl.GetPoint3dAt(k).Y;
string node_code = "";
if (node_code == "")//如未找到同坐标点,则通过图形重新获得
{
node_code = GenerateCode(mapNum, name);//生成本点号
if (node_code != "")
{
ArrayList mainInfo = new ArrayList();
mainInfo.Add(node_code);
mainInfo.Add(y1.ToString());
mainInfo.Add(x1.ToString());
ArrayList head = new ArrayList();
head.Add("本点号");
head.Add("纵坐标");
head.Add("横坐标");
string[]key = { "本点号" };
int[]index = { 0 };
AccessTool.SaveToAccess(name + "点表", head, key,index, mainInfo);
}
}
if (code_former != "" && node_code != "")//进行线表的保存
{
ArrayList mainInfo1 = new ArrayList();
mainInfo1.Add(node_code);
mainInfo1.Add(code_former);
ArrayList head1 = new ArrayList();
head1.Add("本点号");
head1.Add("上点号");
string[]key1 = { "本点号", "上点号" };
int[]index1 = { 0, 1 };
AccessTool.SaveToAccess(name + "线 表", head1,key1, index1, mainInfo1);
}
code_former = node_code;//最后将“本点号”作为下一点的“上点号”
}
需要同时读取“组分类型”、“埋深”、“管径”等属性时,则在录入每一个管点时对其周围的块参照、注记等进行搜索,并通过块参照获取“组分类型”,通过注记获取“埋深”、“管径”等。
2 工程实例
在湖北某地的管线数据入库项目中,原始数据只有以*.dwg形式存储的CAD管线图。我们使用从AutoCAD图形数据反演管线探测数据的方法,得到表1所示的探测数据表[2],然后直接入库。实现了在整理管线图形数据的同时,将其属性数据一并入库。
表1 探测数据管点表
图1所是某块区域的原始CAD管线图,其中包含一些管线相关的注记,用不同颜色表示不同类型的管线。图2是将图1的数据反演为管线探测数据表,而后用MapGIS导入探测数据表得到的管线数据图[3]。可以明显看到,两个图的图形结构完全一致,管线类型得到完好的保留,管点位置也完全一致。图2拥有统一的图示符号,图1中一些不明显的管点在图2中也能得到体现,使管线图更易读。同时,图2中的管点和管段还保存了属性信息,具备了参与空间分析的能力。
图1 管线原始CAD图
图2 反演后入库管线图
3 结 语
本文研究了一种将管线从CAD图形转换成探测数据表的方法。该方法实现了属性信息一并入库,能满足管线数据的管理、使用和分析需要。不足之处在于,转换前需要对图形数据进行预处理,否则可能出现属性信息录入不准确的情况。另外,某些管段属性由于注记标识位置沿线分布,需要人工干预。如何能更智能地对管点、管段属性进行识别将是该方法以后的改进方向。
[1]陈小航,张亦工.地下管线普查、建库、管理系统一体化构想[J].现代测绘,2003,26(2):41-44
[2]李黎,李剑.基于空间数据引擎的综合地下管线数据组织[J].测绘科学,2007,32(2):133-134
[3]郑贵洲,姚昳昕,彭俊芳.AutoCAD与MapGIS K9数据转换[J].测绘地理信息,2013,38(2):39-41
[4]刘钅泉,王炳伟,徐德军.综合管网地理信息系统的设计与实现[J].地理空间信息,2007,5(2):69-70
[5]洪中华,陈绍杰,徐志刚.地下管线建库的关键技术及应用[J].龙岩学院学报,2009,27(5):44-46
[6]赵春燕,施建昭,于海乾.基于ObjectARX的CAD二次开发技术实现管线数据的入库和编辑[J].现代测绘,2010,33(5):58-60
[7]张卫,孔令遂,张书生,等.基于VBA的AutoCAD管线图形的属性数据入库[J].北京测绘,2011(4):39-42