毕业设计——第三章 开发方法及系统实现(2)

简介:   3.3 地图操作类CMapControl详述 3.3.1地图操作类CMapControl 类的成员属性和方法 表 3-2 CMapControl类中实现的成员属性[5] 名称 ...
 
3.3 地图操作类CMapControl详述
3.3.1地图操作类CMapControl 类的成员属性和方法
表 3-2 CMapControl类中实现的成员属性 [5]
名称
数据类型
说明
ErrorCode
int
该类中形成的错误信息
LintPtCount
int
管线点的总数
mapZoomFull
MapObjects2.Rectange
图层缩放处理
Message
string
消息(包括错误信息)
Model
global.Model
当前模式
objMap
AxMapObjects2.AxMap
地图控件对象
PointCount
int
高程点总数

CMapControl类的方法如下表所示:
表 3-3 CMapControl类的成员方法
名称
参数
返回值
说明
CMapControl
 
 
构造函数
CMapControl
AxMapObjects2.AxMap
 
重载构造函数
AddLayerFromFolder
string,string
bool
加载数据库文件
AddLine
MapObjects2.Point
 
添加线对象
AddPoint
MapObjects2.Point
 
添加点对象
BasePoint
MapObjects2.Point,global.Model
 
地图基本处理
getZ
ptZD2,MapObjects2.Point
MapObjects2.Point
计算点的高程
GetCross
 
MapObjects2.Point
两直线的交点
LocationRect
MapObjects2.Point
MapObjects2.Point
计算最短距离
ptProcess
MapObjects2.Point
 
对点进行处理
ZoomChange
int
 
放大、缩小处理
3.3.2地图操作类CMapControl方法的具体实现
3.3.2.1 数据处理模型
本系统中的数据分为与地理信息有关的数据和与地理信息无关的数据。前者指的是与网点、管线位置相关的数据,如网点的坐标值、网点的名称、唯一标志号;管线的坐标值、名称唯一标志号等;后者指的是管件的属性信息,如口径、长度、地理位置、埋设年月、供排水流量等。在功能明确基础上,建立完备的数据字典。
对于与地理信息有关的数据,可用Shape 格式的图层表示存储,这样便于地理信息和地图对象紧密地结合起来。对于与地理信息无关的数据,可采用SQL 关系数据库来存储,这样便于数据的维护和共享使用。
3.3.2.2 地图投影模型
空间数据库的全部图层必须使用一致的投影方法才能精确匹配,只有确定了各类投影数据,才能将各种空间数据转换到统一的地理坐标系中。MapObjects 中的地图坐标系统分为地理坐标系统和笛卡儿平面坐标系统,地理坐标系统中对象的坐标用经纬度来表示,平面坐标中对象的坐标通常是相对坐标,是相对于图中的某个基准点来设置的。如果图层的坐标不一致的话,必须先转换坐标才能进行匹配。
MapObjects 包含有预定义的坐标系统和坐标转换。空间数据shape 文件作为地理图层MapLayer 被添加到MapObjects 中的时候,投影的详细信息也会被保存在磁盘上的一个投影文件(.prj)里,Shapefiles 使用的投影文件是可被MapObjects 进行写操作的投影元数据的格式。用户可以将任何投影数据放在一个共同的投影里进行浏览和分析,也可以将地图图层都输出到一个新的投影里。
3.3.2.3 地图图层的加载与显示
MapObjects 可以在程序设计期间载入图层,也可在程序运行中添加、删除图层或改变图层的属性,这些都可操纵MapObjects 对象的编程语句实现。在本例中采用窗体生成的时候自动加载图层并在控件中显示。
当加载用户自定义图层时,可使用MapObjects对象的图层管理对象来加载用户自定义的图层。代码实现如下:
在实现过程中,我们调用了MapObjects的Connect方法连接Shape文件。详细设计代码如下:
作 用
连接到地图数据库
 
(1) DbFolderName 数据库所在文件夹
(2) LayerName 需加载层名
返回值
true 加载图层成功, false 加载失败
public bool AddLayerFormFolder(string DbFolderName,string LayerName)
{
       bool DbConn=false;
       MapObjects2.DataConnection mapDataConnection;
mapDataConnection =new MapObjects2.DataConnectionClass();
       MapObjects2.MapLayer mapLayer=new MapObjects2.MapLayerClass();
       MapObjects2.Symbol mapSymbol=new MapObjects2.SymbolClass();
       try
       {
              mapDataConnection.Database=DbFolderName;
              DbConn=mapDataConnection.Connect();
              if(!DbConn)
              {
                     this._msg+="/n连接到地图数据库 "+DbFolderName+" 时,发生错误!";
                     return false;
              }else{
                     mapLayer.GeoDataset=mapDataConnection.FindGeoDataset(LayerName);
                     mapSymbol.CharacterIndex=1;
                     mapSymbol.Color=(uint) MapObjects2.ColorConstants.moGreen;
                     mapLayer.Symbol=mapSymbol;
                     this._map.Layers.Add(mapLayer);
                     this._map.Refresh();
                     return true;
              }
       }
       catch
       {
              this._msg+="/n未发现 "+ LayerName +" 的层!";
              return false;
       }
       finally
       {
              mapDataConnection.Disconnect();
       }
}
3.3.2.4 地理信息增、删、改功能的实现
本系统中的使用MapObjects对象可以对MapObjects 中的地理对象通常使用点(如管线节点、井口等)、线(河流、街道、管线等)、面(运动场、城市和土地区域等)来表示。
MapObjects 提供标准的地理对象类型定义,在MapObjects 所提供的点、线、面类型中,用户可以方便地设计地理对象的类型,包括所使用的符号的形状、颜色、大小等属性。结合编程语言还可以给用户设计出完善的画图工具,可以调用它们为用户设计出多种多样的地理对象生成工具。还可以设计出多种地理信息对象的选择工具,如矩形选择工具、圆形选择工具等。 可以把这些选择工具与MapObjects 所提供的删除地理对象功能相结合以完成地理信息系统中地理对象的删除功能;在实现地理信息的修改功能时,可以使用面向对象语言所提供的对于数据库和MapObjects 控件图层表的访问功能来访问地理信息。同时,对于地理数据和非地理数据处理方式是不同的。
在本例子中,使用MapObjects 提供的各种图形工具来实现地理信息的增、删、改。根据工具栏barGraphics 上按钮选择,在图层上添加注记、节点和供排水管线等对象的操作,各种操作对象的函数实现定义在CMapControl类中,详细代码见附录代码。
作 
图层的基本操作选择函数
 
(1) point 鼠标点击的点对象
(2) gloModel 全局变量 global 对象的 EditModel 状态
返回值
public void BaseProcess(MapObjects2.Point point,global.Model gloModel)
{
       this._model=gloModel;
       switch(gloModel)
       {
              case (global.Model.ZoomIn):     //图像放大
                     MapObjects2.Rectangle inRect=_map.TrackRectangle();
                     if(inRect==null || inRect.Width<0.00005 || inRect.Height<0.00005)
                     {
                            inRect=this._map.Extent;
                            inRect.ScaleRectangle(0.6667);
                            inRect.Offset(-(inRect.Center.X-point.X),-(inRect.Center.Y-point.Y));
                     }
                     _map.Extent=inRect;
                     break;
              case(global.Model.ZoomOut):   //缩小图像
                     MapObjects2.Rectangle rect=_map.TrackRectangle();
                     if(rect==null || rect.Width<0.0005 || rect.Height<0.0005)
                     {
                            rect=_map.Extent;
                            rect.ScaleRectangle(1.5);
                            rect.Offset(-(rect.Center.X-point.X),-(rect.Center.Y-point.Y));
                     }
                     else
                     {
                            double _times=_map.Extent.Width/rect.Width;
                            rect.ScaleRectangle(_times);
                     }
                     _map.Extent=rect;
                     break;   
              case(global.Model.Pan):     //移动图像
                     this._map.MousePointer=MapObjects2.MousePointerConstants.moPanning;
                     this._map.Pan();
                     this._map.MousePointer=MapObjects2.MousePointerConstants.moPan;
                     break;
              case(global.Model.AddPoint):
                     CDbProcess DbProc=new CDbProcess(); //新的类操作对象
                     DbProc.m_Dg=this.m_Dg;
                     DbProc.AddPointToDg(point);                      this.AddPoint(point,0,global.Model.AddPoint);
                     break;
              case(global.Model.AddLine):
                     this.AddLine(point);
                     break;
              default:
                     break;
       }    
}
3.3.2.5 地理信息查询和分析功能的实现
对于地理信息系统中有关地理信息查询功能和分析统计功能,由MapObjects 提供强大的查询和分析手段:
(1)按照地理目标之间相对距离的关系搜索(SearchByDistance);如查询距离道路以15m 内的建筑物的位置、名称、面积和使用情况。
(2) 按逻辑查询,即按SQL语句的条件从句查询图形特征(SearchByExpression),如搜索距离某管线最近的节点的位置。
(3)根据与已知图形的关系来查询其它的图形特征,如选择被已知图形包含的其它图形特征(SearchByShape)。
对于非地理信息数据,使用C# 中ADO.NET 数据库中的数据的方法进行显示、查询和处理。
3.4 数据操作类CDbProcess详述
3.4.1数据操作类CDbProcess的成员属性和方法
CDbProcess类的成员属性见下表:
表 3-4 CDbProcess类的成员属性
名称
数据类型
说明
m_ClickID
int
当前点击的ID
m_Dg
Datagrid
存储数据的DataGrid对象
m_Model
global.Model
当前模式
Message
string
消息(包括错误信息)

CDbProcess类的成员方法如下表:
表 3-5 CDbProcess类的成员方法
名称
参数
返回值
说明
CDbProcess
 
 
构造函数
AddPointToDg
MapObjects2.Point
 
添加点数据至控件
AddPointToDg
MapObjects2.Point,int
bool
添加点数据至控件
FillPointData
DataGrid
 
初始化数据控件
Initialization
 
 
初始化变量
LocationRect
MapObjects2.Point
MapObjects2.Point
计算最短距离
ShowErrorMessage
 
 
显示该类的错误信息
 
目录
相关文章
|
存储 算法 前端开发
【软件设计师-从小白到大牛】上午题基础篇:第五章 结构化开发方法
在结构化分析中,用数据流图描述 数据在系统中如何被传送或变换,以及如何对数据流进行变换的功能或子功能,用于对功能建模。 数据字典有以下4类条目:数据流、数据项、数据存储和基本加工。
185 0
|
7月前
|
敏捷开发 算法 测试技术
【软件设计师—基础精讲笔记5】第五章 软件工程基础
【软件设计师—基础精讲笔记5】第五章 软件工程基础
110 2
|
7月前
|
设计模式 存储 算法
【软件设计师—基础精讲笔记7】第七章 面向对象技术
【软件设计师—基础精讲笔记7】第七章 面向对象技术
135 1
|
7月前
|
存储 自然语言处理 算法
【软件设计师—基础精讲笔记6】第六章 结构化开发方法
【软件设计师—基础精讲笔记6】第六章 结构化开发方法
241 0
|
程序员
《软件设计的哲学》第三章 工作代码是不够的
《软件设计的哲学》第三章 工作代码是不够的
|
数据处理
【软件工程】第三章
【软件工程】第三章
|
编译器 程序员 Linux
嵌入式软件开发第一讲笔记
嵌入式软件开发第一讲笔记
57 0
|
敏捷开发 存储 安全
软考——软件设计师:第七章:系统开发基础(软件工程&结构化开发)考点总结(完整篇)
软考——软件设计师:第七章:系统开发基础(软件工程&结构化开发)考点总结(完整篇)
软考——软件设计师:第七章:系统开发基础(软件工程&结构化开发)考点总结(完整篇)
|
存储 数据挖掘 芯片
嵌入式软件设计专栏导读
嵌入式软件设计专栏导读
142 0