法律状态公告日
法律状态信息
法律状态
2015-04-01
未缴年费专利权终止 IPC(主分类):G06T11/20 授权公告日:20111221 终止日期:20140203 申请日:20100203
专利权的终止
2011-12-21
授权
授权
2010-09-15
实质审查的生效 IPC(主分类):G06T11/20 申请日:20100203
实质审查的生效
2010-07-21
公开
公开
技术领域
本发明涉及地理信息共享领域,具体涉及一种AutoCAD图块与基于路径的点状地图符号交换方法。
背景技术
地理信息共享是指以计算机及空间数据基础设施等硬件技术为依托,在标准、政策、法律等软环境支持下,对地理信息进行共同使用。地图符号是空间数据可视化的主要工具,它通过象形的、会意的图形刺激人的左脑,产生心像,来传递地理实体的特征、分布规律等信息。
现有的地理信息共享技术很少考虑地图符号信息的共享,即使涉及,效果也并不理想,特别是CAD与GIS之间符号如何共享一直是困扰大家的难题。究其原因,是GIS中数据模型与CAD制图数据模型差异。GIS侧重地学分析,以地理对象为中心,强调地理空间数据的完整性,强调其独立的地理意义,而CAD制图为了符合制图规范的要求,以图形为中心,往往无法保持数据完整的地理意义。导致地理数据共享时符号信息丢失、变形。此外,CAD系统中符号化均是将任意实体对象(点、折线、参数曲线等)集合定义为一个图块(Block)或形(Shape),图块或形可以作为一个整体插入、缩放、旋转。此种方式缺点是图块与地理对象数据捆绑在同一个数据文件中,不能脱离CAD软件环境进行查询、浏览。不利于单独建立符号体系,不便于符号交换与共享。因此,实际工作中经常需要采集两套数据、制作多套符号,分别供制图与GIS使用。
为解决上述问题,需要要将地学分析与制图功能整合在一起,其重中之重是两者之间符号数据的共享,因此需要一种新的方法,能够同化当前主流CAD、GIS软件中的符号,共享同一个符号库,减少不必要的重复劳动,提高制图效率。
基于路径的点状地图符号数据模型,是一种基于路径的点状地图符号数据模型,在吸取传统CAD与GIS符号模型的基础上,借鉴了PostScript语言、SVG规范、Flash技术中的图形描述机制,如图1所示,符号库包括符号与模板,符号为有限路径(Path)的集合,路径由段构成,段可以包括直线、弧、Bezier曲线和样条曲线四类。其中,直线包括直线段与折线,弧包括圆、椭圆、圆弧、椭圆弧,Bezier曲线包括二次与三次Bezier曲线,样条曲线采用非均匀有理B样条曲线(NURBS曲线),该曲线为STEP标准中自由型曲线唯一表示方法。模板是指一种符号构建方式,地图符号中常见的矩形、星型、规则多边形等均可以定义为构建Path的模板。同时,新的符号结构采用FlyWeight(享元)模式解决了Path与Stroke、Fill操作的“解耦和”问题,使得同一个Path可以被多个Stroke和Fill操作引用。因此,基于路径的点状地图符号结构具备通用图形描述能力,且兼顾了地图符号的构图特点,能够同化目前主流的地图符号。
名称为“基于虚拟机的地理信息系统通用符号系统及其构建方法”(申请号200610018873.0,公开号CN1838073A)、名称为“点、线、面一体化地物符号形成方法”(申请号200710021392.X,公开号CN101075244A)、名称为“复杂地图符号的计算机自动绘制方法”(申请号200710053790.X,公开号CN101159065)、名称为“一种自适应电子地图符号的系统及方法”(申请号200810239848.4,公开号CN101458819)的专利,均公开了地图符号构建方法的,但它们均未涉及对AutoCAD图块与基于路径的点状地图符号交换方法。
发明内容
本发明目的在于克服现有的地图符号共享方面存在的缺陷,解决地图中点状符号异构问题,在基于路径的点状地图符号数据模型基础上,提出AutoCAD图块与基于路径的点状地图符号(简称为VGE点状地图符号)交换方法,提供AutoCAD图块与基于路径的点状地图符号间的双向映射,实现点状地图符号的同化、共享。
实现本发明目的的技术方案是:AutoCAD图块与基于路径的点状地图符号交换方法,该方法包括AutoCAD图块向基于路径的点状地图符号转换和基于路径的点状地图符号向AutoCAD图块转换两部分。
其中:所述AutoCAD图块向基于路径的点状地图符号转换包括以下几个步骤:
步骤1AutoCAD图块判读:对需要同化的AutoCAD文件进行识别,鉴别其图块格式,基于该格式的数据模型,读取AutoCAD图块数据;
步骤2AutoCAD图块分类:对AutoCAD图块进行分类,将数据中的AutoCAD图块按照几何形状进行分类;
步骤3AutoCAD图块向基于路径的点状地图符号映射:在基于路径的点状地图符号数据模型基础上,将分类后图块中的实体对象映射为基于路径的点状地图符号数据。
所述步骤2具体是指:将直线与多段线中的折线归为一类,多段线中的圆弧、圆、圆弧、椭圆弧归为一类,样条曲线单独成类。
所述步骤3具体是指:将直线与多段线中的折线映射为MoveTo、LineTo,多段线中的圆弧、圆、圆弧、椭圆弧映射为ArcTo,样条曲线映射为BsplineTo。
所述基于路径的点状地图符号向AutoCAD图块转换包括以下几个步骤:
步骤I基于路径的点状地图符号判读:对基于路径的点状地图符号文件进行识别,鉴别其符号格式,根据基于路径的点状地图符号数据模型,将符号文件中的地图符号数据加载到内存中;
步骤II基于路径的点状地图符号分类:将加载到内存中的基于路径的点状地图符号数据按照几何形状进行分类;
步骤III基于路径的点状地图符号向AutoCAD图块映射:将步骤2分类后的地图符号数据映射为AutoCAD图块中的数据。
所述步骤I具体是指,根据基于路径的点状地图符号数据模型,即符号库、符号、路径、顶点、笔划和填充六层结构,将符号文件中的地图符号数据加载到内存中。
所述步骤II具体是指,将基于路径的点状地图符号中的弧拆为三个部分:圆、圆弧、椭圆与椭圆弧,Bezier曲线与样条曲线归为一类,直线单独成类。
所述步骤III具体是指,将直线(MoveTo、LineTo)映射为AutoCAD图块中的折线,弧(ArcTo)中的圆、圆弧、椭圆与椭圆弧分别映射为AutoCAD图块中的圆、圆弧、椭圆,Bezier曲线(CurveTo)与样条曲线(BsplineTo)映射为AutoCAD图块中的样条曲线。
本发明不仅能够对AutoCAD图块中的地图符号进行交换,而且能够对其中的普通符号(图形)进行交换,如家具、植物等。具备通用图形描述能力,且兼顾了地图符号的构图特点。
附图说明
图1本发明基于路径的点状地图符号数据模型示意图
图2本发明AutoCAD图块与基于路径的点状地图符号同化路线示意图
图3本发明实施例中AutoCAD图块实体对象映射为基于路径的点状地图符号路径示意图
图4本发明实施例中基于路径的点状地图符号路径映射为AutoCAD图块实体对示意图
具体实施方式
下面结合附图和实施例对本发明做进一步详细说明。
本发明在基于路径的点状地图符号数据模型基础上,提出AutoCAD图块与VGE点状地图符号交换方法,提供了AutoCAD图块向基于路径的点状地图符号的映射、基于路径的点状地图符号向AutoCAD图块的映射。为AutoCAD与GIS点状地图符号共享供了一条新的技术路线,有利于推动制图规则和知识的形式化表达,有利于消除地图符号学中因符号数据模型异构带来的歧义。
实施例1
如图2所示,AutoCAD图块与基于路径的点状地图符号交换方法,该方法包括AutoCAD图块向基于路径的点状地图符号转换和基于路径的点状地图符号向AutoCAD图块转换两部分。
AutoCAD图块向基于路径的点状地图符号转换包括以下几个步骤:
步骤1、AutoCAD图块判读;
步骤2、AutoCAD图块分类;
步骤3、AutoCAD图块向基于路径的点状地图符号映射。
本实例以Windows XP SP3为操作系统环境,Visual Studio 2008 SP1为开发环境,C++为开发语言,AutoCAD 2008为CAD平台,AutoCAD点状地图符号以图块(Block)方式存储。
具体实施步骤如下:
步骤1AutoCAD图块判读是指对需要交换的AutoCAD文件首先进行识别,鉴别其图块格式,如AutoCAD的*.dwg、*.dxf格式。dxf格式是Autodesk公司开发的用于AutoCAD与其它软件之间进行CAD数据交换的数据文件格式,本实例中采用DXF格式进行CAD符号数据同化。AutoCAD中符号大多采用图块(Block)或形(Shape)方式来组织,本实例以图块为例。然后,读取*.dxf文件中的图块数据,包括图块名称、插入基点坐标、块标记等数据。
步骤2AutoCAD图块分类是步骤2基础上,将数据中的图块按照几何形状进行分类。如图块是由若干个实体对象组合而成,实体对象包括点、直线、多段线、圆弧、圆、椭圆、样条曲线等。按照这些实体对象的几何形状,将它们分为几类,直线、多段线分为一类,点、圆、圆弧、椭圆分为一类,样条曲线单独成类。
步骤3AutoCAD图块向基于路径的点状地图符号映射是指在VGE点状地图符号数据模型基础上,将分类后的AutoCAD图块数据映射为基于路径的点状地图符号。如图2、3所示,分别将步骤2中分类后的实体对象映射为基于路径的点状地图符号中的路径,映射方法如下:
①直线:
直线对象记录了起点与终点坐标,在基于路径的点状地图符号中将其映射为路径MoveTo(起点)、LineTo(终点)。
void addLine(const DL_LineData& data)
{
CartoPath path;
path.MoveTo((float)data.x1,(float)data.y1);
path.LineTo((float)data.x2,(float)data.y2);
m_pMarker->m_CartoPaths.push_back(path);
}
②多段线:
多段线对象由首尾相连的若干条直线或圆弧组成,在dxf文件中,多段线记录了顶点数、顶点坐标以及顶点的凸率(凸率为圆弧四分之一圆心角的正切值),映射则分为两种情况:
i如果凸率为0,则当前顶点与下一个顶点之间为直线,在基于路径的点状地图符号中将其映射为路径MoveTo(当前顶点)、LineTo(下一个顶点)。
ii如果凸率不为0,则当前顶点与下一个顶点之间为圆弧,首先计算圆弧半径r,然后,利用分别以两点为中心、半径为r的两个圆的交点方法计算圆弧圆心,在基于路径的点状地图符号中将其映射为路径ArcTo(当前顶点,下一顶点),如果凸率大于0,则为逆时针弧段,若小于0,则为顺时针弧段。
void addPolyline(const DL_PolylineData& data)
{
CartoPath path;
if(fabs(data1.bulge)<EPSINON)
{
path.MoveTo(data1.x,data1.y);
path.LineTo(data2.x,data2.y);
}
Else
{
path.ArcTo(data1.x,data1.y,data2.x,data2.y,cx,cy,cx,cy,blccw);
}
m_pMarker->m_CartoPaths.push_back(path);
}
③圆:
圆对象中记录了圆心坐标、半径,在基于路径的点状地图符号中将其映射为路径ArcTo(起点、终点),其中圆的起点与终点为同一个点,路径中的两个控制点也为同一个点即圆心。
void addCircle(const DL_CircleData& data)
{
CartoPath path;
path.ArcTo(x_start,y_start,x_start,y_start,
data.cx,data.cy,data.cx,data.cy,true);
m_pMarker->m_CartoPaths.push_back(path);
}
④圆弧:
圆弧对象中记录了所属圆的圆心、半径、起始角、终止角,根据圆的极坐标公式计算圆弧的起点、终点。在基于路径的点状地图符号中将其映射为路径ArcTo(起点、终点),因为圆弧的两个控制点重合(均为圆心),所以,顶点序列依次为起点、终点、圆心、圆心。
void addArc(const DL_ArcData&data)
{
CartoPath path;
path.ArcTo(x_start,y_start,x_end,y_end,
data.cx,data.cy,data.cx,data.cy,true);
}
⑤椭圆(弧):
椭圆对象记录了椭圆中心坐标、相对于中心的长轴端点坐标、短轴与长轴的比例、开始角度以及终止角度。首先根据前三个参数计算椭圆的长半轴及短半轴以及焦距,然后分别计算两个焦点的坐标,最后利用椭圆的标准极坐标方程以及旋转、平移等公式计算椭圆(弧)的起点、终点坐标。在基于路径的点状地图符号中将其映射为Path中的ArcTo(起点,终点),顶点序列依次为起点、终点及左右两焦点,其中椭圆的起点与终点为同一个点。
void addEllipse(const DL_EllipseData&)
{
CartoPath path;
path.ArcTo(x_start,y_start,x_end,y_end,
focus1_x,focus1_y,focus2_x,focus2_y,true);
m_pMarker->m_CartoPaths.push_back(path);
}
⑥样条曲线:
AutoCAD样条曲线对象为非均匀有理B样条曲线(NURBS),到目前为止,相关GIS平台中均没有该曲线。默认条件下不设权值,非均匀有理B样条曲线退化为普通的B样条曲线。NURBS曲线的定义方程如下:
DXF文件中记录了样条曲线的阶数、节点数、控制点数、节点值、控制点坐标、权值以及标记等,AutoCAD默认绘制的是三次样条曲线,可以利用NURBS曲线的定义方程,计算曲线上所有的节点处曲线上的点坐标。在基于路径的点状地图符号中将其映射为Path中的BSplineTo(节点向量,控制点数组)。
void addSpline(const DL_SplineData&)
{
CartoPath path;
path.BSplineTo(knotPtArray,ctrlPtArray);
m_pMarker->m_CartoPaths.push_back(path);
}
基于路径的点状地图符号向AutoCAD图块转换包括以下三个步骤:
步骤1、基于路径的点状地图符号判读
步骤2、基于路径的点状地图符号分类
步骤3、基于路径的点状地图符号向AutoCAD图块映射
步骤1基于路径的点状地图符号判读,是指对基于路径的点状地图符号文件进行识别,鉴别其符号格式,根据VGE点状地图符号数据模型即符号库、符号、路径、顶点、笔划、填充六层结构,将符号文件中的地图符号数据加载到内存中。
步骤2基于路径的点状地图符号分类,是指将加载到内存中的VGE点状地图符号数据按照几何形状进行分类,将基于路径的点状地图符号路径中的弧拆为三个部分:圆、圆弧、椭圆与椭圆弧,Bezier曲线与样条曲线归为一类,直线单独成类。
步骤3基于路径的点状地图符号向AutoCAD图块映射,是指将步骤2分类后的地图符号数据映射为AutoCAD图块,直线(MoveTo、LineTo)映射为AutoCAD图块中的折线,弧(ArcTo)中的圆、圆弧、椭圆与椭圆弧分别映射为AutoCAD图块中的圆、圆弧、椭圆,Bezier曲线(CurveTo)与样条曲线(BsplineTo)映射为AutoCAD图块中的样条曲线。
Void Export2CAD(BlockArray&)
{
If(flag==MoveTo‖flag==LineTo)
{
If(num==2)
MapTo(DL_LineData);
Else
MapTo(DL_PolylineData);
}
Else if(flag==ArcTo)
{
if(start==end && ctrl0==ctrl1)
MapTo(DL_CircleData);
else if(start!=end && ctrl0==ctrl1)
MapTo(DL_ArcData);
else
MapTo(DL_EllipseData)
}
Else if(flag==CurveTo)
{
MapTo(DL_SplineData)
}
Else
{
MapTo(DL_SplineData)
}
}
如图4所示,映射方法如下:
①直线
直线中记录了起点、终点坐标,如果直线只有两个点则将其转换为DXF中的AcDbLine,如果多于两个点,则将其转换为AcDbPolyline。
②弧
基于路径的点状地图符号路径中弧记录了起始点、终止点以及两个控制点的坐标,因此,在映射时判断起始点与终止点是否相等,两个控制点是否为同一个点,将弧分为圆、圆弧、椭圆、椭圆弧。其中,将圆映射为DXF中的AcDbCircle,圆弧映射为DXF中的AcDbArc,椭圆与椭圆弧映射为DXF中的AcDbEllipse。
③贝塞尔曲线
基于路径的点状地图符号路径中贝塞尔曲线记录了结点与控制点坐标,因为贝塞尔曲线可以看为Nurbs曲线的特例,所以,将贝塞尔曲线映射为DXF中的AcDbSpline。
④样条曲线
基于路径的点状地图符号路径中样条曲线记录了节点处曲线上的点以及控制点坐标,因此可以反求节点向量、阶数,将样条曲线映射为DXF中的AcDbSpline。
本发明将AutoCAD图块向基于路径的点状地图符号无损映射,有利于实现“一库多用”,为地图符号交换、共享提供了一个可行的途径。
机译: CLOS交换网络中虚拟载波信号的连接路径搜索方法,其基于利用状态,搜索可能的连接路径,基于利用状态,搜索可能的连接路径
机译: 用于执行基于图块的路径渲染的方法和装置
机译: 执行基于图块的路径渲染的方法和装置