开发GIS项目程序
以下是资料介绍,如需要完整的请充值下载.
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
密 惠 保
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
密 惠 保
资料介绍:
面类图形元素的组织[10]
面类图形元素一般是由闭合线围成的区域。根据围成面的边界不同,有不同形式的面,如圆形区域椭圆形区域复合线区域多边形区域等。最常用的面是多边形区域,其边界由一条连续直线组成。因为另外各种类型面的边界一般都可以用连续直线来近似描述,所以,本设计只讨论多边形区域的实现方法。
在描述多边形区域时,最主要的是要描述边界顶点坐标。描述面的边界顶点坐标时,有不同的描述方法,一种方法是将边界由几段连续直线来描述。
另外一种描述方法是直接存储区域的边界顶点坐标,即把区域的整个边界作为一条连续直线来存储。这种方法的缺点是造成坐标的重复存储;优点是具有较强的独立性,不用考虑组成区域的连续直线段。
在本设计中,采用直接存储边界坐标的方式。用这种方式组织多边形区域时,组织方式与连续直线类似。所以,可以由连续直线类CPline派生出一个CPlineRgn类,来对多边形区域进行管理。
1.1.5 网络类图形元素的组织
网络分析是GIS的一项非常重要的基本功能,最佳路径分析、最佳游历路径分析、连通分析、资源分配等都需要有网络类图形元素对网络进行描述、显示和分析。为了能够对网络进行描述和处理,在系统中增加一类图形元素来描述有方向、无转角的网络图。这类图形元素称为网络点。 think58.com [资料来源:http://think58.com]
1.1.6 图形参数类
在矢量图形系统中,图形参数是集中存储的。在图形元素基类中成员变量m_ColorPen,m_ColorBrush等存储的是颜色列表的序列号,m_Layer中存储的也是在图层列表中的序列号。
1.2 组织矢量图形系统的文档
1.2.1 组织面向对象的文档管理机制
管理矢量图形系统图形数据的方法即文档管理机制。在本设计的开发中,采用一套完全面向对象的文档组织机制。这种机制就是通过图形元素类创建很多图形元素对象,每个图形元素对象作为一个整体来组织存储空间的分配、存取等各种管理功能。然后通过建立一种存储机制,来管理指向所有图形元素对象的指针,达到管理所有图形元素对象的目的。这种文档管理机制具有组织简单结构化和移植性好,以及比较容易利用VC++程序设计语言的开发功能等优点。缺点是需要较大的内存空间。
1.2.2 利用MFC摸板创建管理图形元素对象指针的对象
管理一个矢量图形系统文档的思路是:每个图形元素是图形元素类创建的一个对象,在创建这个对象时得到指向这个对象的指针,建立一个对象指针数组来管理这些指针,以达到管理所有图形元素对象的目的。
在VC++下可以较容易地实现对指向图形元素对象的指针的组织和管理。在MFC中有一个类模班CTypedPtrArray,可以用它来创建一个管理类指针的对象。例如,可以定义一个管理CLine 类指针的对象如下: [资料来源:THINK58.com]
CTypedPtrArray<CObArray,Cline*>m_LineArray;[10]
1.2.3 实现矢量图形系统的文档
在应用程序Draw中,可以派生几个CObArray对象来分别管理基类图形元素。在文档类CDrawDoc 中创建几个管理各类图形元素对象指针的CObArray 对象如下:
private:
CTypedPtrArray<CObArray,CLine*>m_LineArray;
CTypedPtrArray<CObArray,CCircle*>m_CircleArray;
CTypedPtrArray<CObArray,CArc*>m_ArcArray;
CTypedPtrArray<CObArray,CText*>m_TextArray;
CTypedPtrArray<CObArray,CTag*>m_TagArray;
CTypedPtrArray<CObArray,CPline*>m_PLineArray;
CTypedPtrArray<CObArray,CPlineRgn*>m_PLineRgnArray;
CTypedPtrArray<CObArray,CLinkNet*>m_NetArray;
1.2.4 实现文档的管理功能
⑴增加图形元素
在应用程序Draw 中增加一个图形元素对象(如一条直线)时,需要进行以下两个步骤的操作:
① 首先需要创建一个图形元素对象,并用图形元素的实际数据初始化这个图形元素对象。如增加一条直线时,需要创建一个CLine 对象,并用这条直线的实际数据(起终点、所在图层、颜色等)初始化这个CLine 对象的成员变量。 think58.com
② 然后需要把指向新创建的图形元素对象的指针,增加到文档类中管理图形元素对象指针的对象中。如增加一条CLine 对象后,需要把指向这个CLine 对象的指针增加到文档类的m_LineArray 对象中。
为了实现增加各类图形元素的功能,在文档类CDrawDoc 中定义几个函数,
分别来完成增加各类图形元素的操作功能[3]
CLine* AddLine(short ColorPen,short ColorBrush,float LineWide,short LineType,short Layer,int id_only,float X1,float Y1,float X2,float Y2);
CCircle* AddCircle(short ColorPen,short ColorBrush,float LineWide,short LineType,short Layer,int id_only,float CircleX,float CircleY,float CircleR,BOOL bFill);
CArc* AddArc(short ColorPen,short ColorBrush,float LineWide,short LineType,short Layer,int id_only,float CircleX,float CircleY,float CircleR,float Angle1,float Angle2);
CText* AddText(short ColorPen,short ColorBrush,float LineWide,short LineType,short Layer,int id_only,float StartX,float StartY,float Angle1,float Angle2,float TextHeight,float TextWide,float OffWide,unsigned char TextFont,int TextLong,CString Text);
CTag* AddTag(short ColorPen,int Layer,float xInsert,float yInsert,float xScale,float yScale,float angle,int only_id,int idBlock);
CPline* AddPLine(short ColorPen,short ColorBrush,float LineWide,short LineType,short Layer,int id_only,int Numble,PointStruct *PointList);
CPlineRgn* AddPLineRgn(short ColorPen,short ColorBrush,float LineWide,short LineType,short Layer,int id_only,int Numble,PointStruct *PointList,BOOL bTransparent,BOOL bFill);
CLinkNet* AddNetPoint(float x,float y,float rRadiu,short Layer,int id_only,short ColorPen);
这8个函数分别用来实现增加一条直线、一个圆、一个圆弧、一个标注文本、一个子图、一条连续直线、一个多边形区域、一个网络点的功能。函数返回指向新增图形元素对象的指针。
⑵得到指向图形元素对象的指针
在一个矢量图形系统中,有大量的图形元素,指向图形元素对象的指针被保存在文档类对应的CObArray 对象中。在系统的操作过程中,为了实现对图形元素的各种操作功能,需要得到指向指定图形元素对象的指针,为此,在文档类CDrawDoc 中定义一个函数GetGraph如下:
Public:
CDraw* GetGraph(short Lb, int index );
在实现文件drawdoc.cpp中,加入函数的具体实现代码。
⑶删除图形元素对象
为了能够从 CObArray 对象中删除一个指定图形元素对象指针,在文档类CDrawDoc中定义一个成员函数:
Public:
Void DeleteGraph(short Lb, int index);
在实现文件drawdoc.cpp中,加入函数的具体实现代码。
⑷得到各类图形元素的数目
为了能够随时得到文档中各类图形元素对象的数目,在文档类CDrawDoc 中,定义一个成员函数如下:
Public:
Int GetGraphNumb(short Lb);
在实现文件drawdoc.cpp中,加入函数的具体实现代码。
⑸得到存储各类图形元素CObArray 对象数组的最大下标
在对各个图形元素类的所有图形元素进行操作时,需要得到存储在各个CObArray 对象中的最大数组下标,然后对各个数组项实现遍历操作。为了得到存储在各个CObArray 对象中的最大数组下标,在文档类CDrawDoc中定义一个函数如下:
Public:
Int GetGraphUpperBound(short Lb);
在实现文件drawdoc.cpp中,加入函数的具体实现代码。
⑹得到某个识别号的图形元素对象指针在CObArray 数组中的存放位置
Public:
Int GetGraphIndex(short Lb,int ID);
在实现文件drawdoc.cpp中,加入函数的具体实现代码。 [资料来源:http://www.THINK58.com]
⑺增加网络连接
对于一个网络点来说,其最主要的特性就是指向其他网络点的连接。
为了增加网络连接,首先在CNet 类中定义一个增加网络连接的函数AddLink;
Public:
Void AddLink(int nID);
函数的参数是连接要指向的网络点的识别号;
在文档类CDrawDoc中定义一个函数AddNetLink,实现在一个网络点中增加一个指向另外一个网络点的连接。
在实现文件drawdoc.cpp中,加入函数的具体实现代码。
面类图形元素一般是由闭合线围成的区域。根据围成面的边界不同,有不同形式的面,如圆形区域椭圆形区域复合线区域多边形区域等。最常用的面是多边形区域,其边界由一条连续直线组成。因为另外各种类型面的边界一般都可以用连续直线来近似描述,所以,本设计只讨论多边形区域的实现方法。
在描述多边形区域时,最主要的是要描述边界顶点坐标。描述面的边界顶点坐标时,有不同的描述方法,一种方法是将边界由几段连续直线来描述。
另外一种描述方法是直接存储区域的边界顶点坐标,即把区域的整个边界作为一条连续直线来存储。这种方法的缺点是造成坐标的重复存储;优点是具有较强的独立性,不用考虑组成区域的连续直线段。
在本设计中,采用直接存储边界坐标的方式。用这种方式组织多边形区域时,组织方式与连续直线类似。所以,可以由连续直线类CPline派生出一个CPlineRgn类,来对多边形区域进行管理。
1.1.5 网络类图形元素的组织
网络分析是GIS的一项非常重要的基本功能,最佳路径分析、最佳游历路径分析、连通分析、资源分配等都需要有网络类图形元素对网络进行描述、显示和分析。为了能够对网络进行描述和处理,在系统中增加一类图形元素来描述有方向、无转角的网络图。这类图形元素称为网络点。 think58.com [资料来源:http://think58.com]
1.1.6 图形参数类
在矢量图形系统中,图形参数是集中存储的。在图形元素基类中成员变量m_ColorPen,m_ColorBrush等存储的是颜色列表的序列号,m_Layer中存储的也是在图层列表中的序列号。
1.2 组织矢量图形系统的文档
1.2.1 组织面向对象的文档管理机制
管理矢量图形系统图形数据的方法即文档管理机制。在本设计的开发中,采用一套完全面向对象的文档组织机制。这种机制就是通过图形元素类创建很多图形元素对象,每个图形元素对象作为一个整体来组织存储空间的分配、存取等各种管理功能。然后通过建立一种存储机制,来管理指向所有图形元素对象的指针,达到管理所有图形元素对象的目的。这种文档管理机制具有组织简单结构化和移植性好,以及比较容易利用VC++程序设计语言的开发功能等优点。缺点是需要较大的内存空间。
1.2.2 利用MFC摸板创建管理图形元素对象指针的对象
管理一个矢量图形系统文档的思路是:每个图形元素是图形元素类创建的一个对象,在创建这个对象时得到指向这个对象的指针,建立一个对象指针数组来管理这些指针,以达到管理所有图形元素对象的目的。
在VC++下可以较容易地实现对指向图形元素对象的指针的组织和管理。在MFC中有一个类模班CTypedPtrArray,可以用它来创建一个管理类指针的对象。例如,可以定义一个管理CLine 类指针的对象如下: [资料来源:THINK58.com]
CTypedPtrArray<CObArray,Cline*>m_LineArray;[10]
1.2.3 实现矢量图形系统的文档
在应用程序Draw中,可以派生几个CObArray对象来分别管理基类图形元素。在文档类CDrawDoc 中创建几个管理各类图形元素对象指针的CObArray 对象如下:
private:
CTypedPtrArray<CObArray,CLine*>m_LineArray;
CTypedPtrArray<CObArray,CCircle*>m_CircleArray;
CTypedPtrArray<CObArray,CArc*>m_ArcArray;
CTypedPtrArray<CObArray,CText*>m_TextArray;
CTypedPtrArray<CObArray,CTag*>m_TagArray;
CTypedPtrArray<CObArray,CPline*>m_PLineArray;
CTypedPtrArray<CObArray,CPlineRgn*>m_PLineRgnArray;
CTypedPtrArray<CObArray,CLinkNet*>m_NetArray;
1.2.4 实现文档的管理功能
⑴增加图形元素
在应用程序Draw 中增加一个图形元素对象(如一条直线)时,需要进行以下两个步骤的操作:
① 首先需要创建一个图形元素对象,并用图形元素的实际数据初始化这个图形元素对象。如增加一条直线时,需要创建一个CLine 对象,并用这条直线的实际数据(起终点、所在图层、颜色等)初始化这个CLine 对象的成员变量。 think58.com
[来源:http://think58.com]
② 然后需要把指向新创建的图形元素对象的指针,增加到文档类中管理图形元素对象指针的对象中。如增加一条CLine 对象后,需要把指向这个CLine 对象的指针增加到文档类的m_LineArray 对象中。
为了实现增加各类图形元素的功能,在文档类CDrawDoc 中定义几个函数,
分别来完成增加各类图形元素的操作功能[3]
CLine* AddLine(short ColorPen,short ColorBrush,float LineWide,short LineType,short Layer,int id_only,float X1,float Y1,float X2,float Y2);
CCircle* AddCircle(short ColorPen,short ColorBrush,float LineWide,short LineType,short Layer,int id_only,float CircleX,float CircleY,float CircleR,BOOL bFill);
CArc* AddArc(short ColorPen,short ColorBrush,float LineWide,short LineType,short Layer,int id_only,float CircleX,float CircleY,float CircleR,float Angle1,float Angle2);
CText* AddText(short ColorPen,short ColorBrush,float LineWide,short LineType,short Layer,int id_only,float StartX,float StartY,float Angle1,float Angle2,float TextHeight,float TextWide,float OffWide,unsigned char TextFont,int TextLong,CString Text);
[资料来源:http://www.THINK58.com]
CTag* AddTag(short ColorPen,int Layer,float xInsert,float yInsert,float xScale,float yScale,float angle,int only_id,int idBlock);
CPline* AddPLine(short ColorPen,short ColorBrush,float LineWide,short LineType,short Layer,int id_only,int Numble,PointStruct *PointList);
CPlineRgn* AddPLineRgn(short ColorPen,short ColorBrush,float LineWide,short LineType,short Layer,int id_only,int Numble,PointStruct *PointList,BOOL bTransparent,BOOL bFill);
CLinkNet* AddNetPoint(float x,float y,float rRadiu,short Layer,int id_only,short ColorPen);
这8个函数分别用来实现增加一条直线、一个圆、一个圆弧、一个标注文本、一个子图、一条连续直线、一个多边形区域、一个网络点的功能。函数返回指向新增图形元素对象的指针。
⑵得到指向图形元素对象的指针
在一个矢量图形系统中,有大量的图形元素,指向图形元素对象的指针被保存在文档类对应的CObArray 对象中。在系统的操作过程中,为了实现对图形元素的各种操作功能,需要得到指向指定图形元素对象的指针,为此,在文档类CDrawDoc 中定义一个函数GetGraph如下:
Public:
CDraw* GetGraph(short Lb, int index );
[资料来源:http://THINK58.com]
在实现文件drawdoc.cpp中,加入函数的具体实现代码。
⑶删除图形元素对象
为了能够从 CObArray 对象中删除一个指定图形元素对象指针,在文档类CDrawDoc中定义一个成员函数:
Public:
Void DeleteGraph(short Lb, int index);
在实现文件drawdoc.cpp中,加入函数的具体实现代码。
⑷得到各类图形元素的数目
为了能够随时得到文档中各类图形元素对象的数目,在文档类CDrawDoc 中,定义一个成员函数如下:
Public:
Int GetGraphNumb(short Lb);
在实现文件drawdoc.cpp中,加入函数的具体实现代码。
⑸得到存储各类图形元素CObArray 对象数组的最大下标
在对各个图形元素类的所有图形元素进行操作时,需要得到存储在各个CObArray 对象中的最大数组下标,然后对各个数组项实现遍历操作。为了得到存储在各个CObArray 对象中的最大数组下标,在文档类CDrawDoc中定义一个函数如下:
Public:
Int GetGraphUpperBound(short Lb);
在实现文件drawdoc.cpp中,加入函数的具体实现代码。
⑹得到某个识别号的图形元素对象指针在CObArray 数组中的存放位置
Public:
Int GetGraphIndex(short Lb,int ID);
在实现文件drawdoc.cpp中,加入函数的具体实现代码。 [资料来源:http://www.THINK58.com]
⑺增加网络连接
对于一个网络点来说,其最主要的特性就是指向其他网络点的连接。
为了增加网络连接,首先在CNet 类中定义一个增加网络连接的函数AddLink;
Public:
Void AddLink(int nID);
函数的参数是连接要指向的网络点的识别号;
在文档类CDrawDoc中定义一个函数AddNetLink,实现在一个网络点中增加一个指向另外一个网络点的连接。
在实现文件drawdoc.cpp中,加入函数的具体实现代码。