您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > GIS设计与开发电子教案2014
《GIS设计与开发》电子教案赵卫东资环学院地理信息科学系二0一四年二月《GIS设计与开发》•前言•第一章GIS软件系统的设计•第一节GIS图形绘制基础•第二节GIS软件系统的数据获取•第三节GIS图形数据对象的组织•第四节GIS软件系统的数据组织•第五节VC数据库程序设计•第六节GIS数据分析及其处理•第七节GIS软件系统的数据组织•第八节GIS图形数据与属性数据的关联•第二章GIS系统设计•第一节GIS系统开发方式与技术•第二节GIS组件与二次开发基础•第三节GIS空间分析•第四节GIS数据显示与输出•第三章GIS应用系统设计前言在学习完《地理信息系统原理、方法和应用》等专业课之后,大家对GIS的基本原理有了移动程度的了解,加之已经学习了C语言以及VC++等高级程序语言,应该说已经基本具备了利用高级程序语言开发GIS的能力。但是,《地理信息系统原理、方法和应用》课程仅对GIS的基本原理进行了详细阐述,对GIS的设计和开发(包括对GIS相关软硬件的设计)涉及较少。在GIS既是一门学科,更是一门实用性很强的技术。作为一个GIS本科生,应该具备一定的GIS设计能力。本课程的目的在于:通过讲授GIS软硬件设计原理,使大家基本掌握设计一个基本GIS的方法,并具备较强的利用GIS常用组件进行二次开发的能力。一、进行GIS设计与开发应具备的知识:1、理论知识:地理信息系统原理;数据库原理;计算机图形学;数据结构等;2、编程能力:C语言(或C++);VB等二、GIS设计与开发包括:GIS软件开发和硬件配置:1、GIS软件开发形式:底层开发(C语言(或C++);二次开发(VB,VC++,C#等);嵌入式开发(非GIS专业人员常采用的技术之一等);单一组件开发(目前进行GIS系统开发的主流技术之一等);ComGIS开发(目前进行GIS系统开发的主流技术之一,未来可能占据主导地位).2、GIS系统的硬件配置:系统网络体系配置:(C/S、B/S或C/S+B/S);系统服务器配置等操作系统软件:WINDOWS3.1;98;2000;XP;WIN7;WIN8WINDOWSSERVER2000等;UNIX;LINUX;第一章GIS软件系统的设计与开发§1GIS图形绘制基础一、VC++MFC编程简介二、VC++绘图类及其对象三、VC++绘图设备类(GDI)及其对象四、VC++绘图实例程序讲解(本节重点)五、VC++坐标映像方式六、VC++坐标映像实例程序讲解(本节重点)一、VC++MFC编程简介MFC编程的五大类简介1、CWinApp类:应用程序类,一个程序只有一个应用程序对象;2、CDocument类:文档类,负责保存应用程序的数据;3、CView类:视图类,负责应用程序的图形接口,即与用户之间的交互;MFC编程的五大类简介4、CMDIChildWnd类:多文档应用程序子窗体类,一个多文档应用程序可以有多个子窗体对象;对单文档(SDI)应用程序来说,只有一个子窗体对象。5、CMDIFrameWnd类:多文档应用程序主窗体类,一个多文档应用程序只有一个主窗体(或父窗体)对象;二、VC++绘图类及其对象1、MFC编程的主要绘图类简介(1)CObject类:对象类,是MFC的超类,绝大部分MFC均从该类派生;(2)CDC类:设备环境类,是CObject的派生类,负责图形的绘制和显示;(3)CPaintDC类:屏幕绘图类,是CDC的派生类,负责屏幕图形的绘制和显示;(4)CClientDC类:客户区绘图类,是CDC的派生类,负责客户区图形的绘制和显示;(5)CWindowDC类:窗口绘图类,是CDC的派生类,负责屏幕窗口图形的绘制和显示;2、主要绘图类对象的创建与使用(1)CDC类:CDDmydc;(2)CPaintDC类:CPaintDCmypdc(this);(3)CClientDC类:CClientDCmycdc(this);(4)CWindowDC类:CWindowDCmywdc(this);三、VC++绘图设备类(GDI)及其对象1、MFC编程的主要绘图设备类简介(1)CGdiObject类:绘图设备类,是CObject的派生类,是其他绘图设备类的超类;(2)CPen类:画笔类,是CGdiObject的派生类,负责选用不同类型的画笔;(3)CBrush类:画刷类,是CGdiObject的派生类,负责选用不同类型的充填画刷;(4)CFont类:字体类,是CObject的派生类,负责选用不同类型的标注字体;(5)CRgn类:矩形区域类,是CGdiObject的派生类,负责实现对各类区域的操作,如充填等,可以用于GIS中多边形的绘制;(6)CPalette类:调色板类,是CGdiObject的派生类,负责选用不同颜色;(7)CBitmap类:位图类,是CGdiObject的派生类,负责显示各类图片;2、主要图形设备类对象的创建与使用(1)CPen类:可以用以下三种方式创建画笔类对象:a.CPenmyPen;b.CPenmyPen(PS_SOLID,1,RGB(255,0,0));c.CPen*pMyPen;//定义一个字体对象指针pMyPen=newCPen(PS_SOLID,1,RGB(255,0,0));要特别注意要删除画笔对象:要特别注意使用完画笔对象后要手工删除画笔对象,否则会造成内存泄漏:deletemyPen;或deletepMyPen;(2)CBrush类:可以用以下三种方式创建画刷类对象:a.CBrushmyBrush(RGB(255,0,0));//红色画刷b.CBrushmyBrush;myBrush.CreateSolidBrush(RGB(255,0,0));c.CBrush*pMyBrush;//定义一个字体对象指针pMyBrush=newCBrush(PS_SOLID,RGB(255,0,0));(3)CFont类:可以用以下方式创建字体类对象:CFontmyFont;myFont.CreateFont(30,15,0,0,200,0,0,0,255,0,0,2,DEFAULT_PITCH,”vc”);(3)CRgn类(略,自学)四、VC++绘图实例程序讲解实例1:CGdiPoject.dsw;五、VC++坐标映像方式映像方式映像值逻辑单位X,Y正方向MM_TEXT1像素右下MM_LOMETRIC20.1mm右上MM_HIMETRIC30.01mm右上MM_LONGLISH40.1inch右上MM_HIENGLISH50.01inch右上MM_TWIPS61/1440inch右上MM_ISOTROPIC7可变X=Y变化MM_ANISOTROPIC8可变XY变化1、要求大家重点掌握的方式:(1)MM_TEXT:文本方式,是MFC的默认映射方式,主要用于显示文本;(2)MM_LOMETRIC:低精度公制方式,单位是0.1mm,可以用于GIS绘图;(3)MM_HIMETRIC:高精度公制方式,单位是0.01mm,可以用于高精度GIS绘图;(4)MM_TWIPS:主要用于绘图仪绘制地图;2、坐标系统及其转换:(1)窗口坐标(又称为“逻辑坐标”):MFC的虚拟坐标,其X,Y方向与采用的坐标映射方式有关。如在MM_LOMETRIC方式下,X向右,Y向上,坐标原点(0,0)在屏幕的左上角,逻辑单位为0.1mm/单位。(2)设备坐标(又称为“屏幕坐标”):计算机屏幕的坐标系,其X,Y方向与采用的坐标映射方式无关。X向右,Y向下,坐标原点(0,0)在屏幕的左上角,逻辑单位为像素。2、坐标系统及其转换:(3)用户坐标:计算机用户所采用的坐标系统,其坐标轴的正方向由用户根据自己的使用习惯和要求确定。用户采用的最多的坐标系统包括:笛卡儿坐标、高斯坐标等。(3)用户坐标与逻辑坐标的映射关系MFC的封装的各类绘图函数,如LineTo()函数等,所采用的坐标均为窗口坐标(逻辑坐标),而计算机绘图的最终用户采用的是用户坐标,不同的用户采用的用户坐标不同。一般采用较多的是笛卡儿坐标(数学坐标),而GIS用户采用最多的是高斯坐标。因此,要实现用户坐标到逻辑坐标的映射,即需要实现由用户坐标和逻辑坐标之间的相互转换。(4)窗口坐标与设备坐标的映射MFC的封装的各类绘图函数,如LineTo()函数等,所采用的坐标均为窗口坐标(逻辑坐标),而所绘制的图形在计算机屏幕上显示时采用的却是设备坐标(屏幕坐标)。另一方面,当用户用鼠标在屏幕上单击某一点时,计算机返回的是设备坐标,此时需要将该坐标转换为窗口坐标才能获取相应的图形。因此,就需要实现由窗口坐标和设备坐标之间的相互转换。特别注意:MFC的封装的各类绘图函数,如LineTo()函数等,所采用的坐标均为窗口坐标(逻辑坐标),而所绘制的图形通过各种映射方式映射到相应的图形显示(视图窗口或模拟显示窗口)或打印设备(打印机或绘图仪)上。如下图中,在逻辑坐标(窗口)中绘制的矩形OABC并映射为设备坐标(视口,屏幕坐标)DEFG;直线AC被映射DF。MFC已经封装了各种映射方式及相关的操作函数。只要通过设置不同的映射方式,即可方便实现各类映射。映射的操作函数:SetWindowOrg(x,y):本窗口原点设置函数用于设定窗口坐标系的映射参考原点,缺省时x=y=0,要注意X,Y是逻辑坐标。即窗口坐标系映射参考原点与窗口坐标系原点重合,同时也与缺省的视口坐标系参考原点重合。SetViewportOrg(x,y):本视口原点设置函数用于设定视口坐标系的映射参考原点,缺省时x=y=0,要注意X,Y是设备坐标。即视口坐标系映射参考原点与视口坐标系原点重合,同时也与缺省的窗口坐标系参考原点重合。(5)用户坐标与窗口坐标的转换由用户坐标到逻辑坐标之间的转换主要是坐标方向的转换、坐标轴的旋转、平移和缩放等。一般情况下,仅做坐标方向的转换,坐标轴的旋转、平移和缩放功能则在由窗口坐标向设备坐标转换时实现。(6)窗口坐标与设备坐标的转换假设:PDC-SdWindowOrg(a1,b1);PDC-SdViewportOrg(a2,b2);窗口坐标系中任意一点C(x1,y1)被映射到设备坐标系中的E点,E(x2,y2),即:上图中OE映射到DE,一个象素宽度为n个逻辑单位。并假设坐标映射方式为:MM_LOMETRIC,则一个像素的宽度为:n*0.1mm根据MM_LOMETRIC映射方式下的设备无关性(即窗口坐标中直线段AC的长度应该和设备坐标系中的BD段长度相等):x1-a1=(x2-a2)*n=x!=a1+(x2-a2)*ny1-b1=(y2-b2)*n=y!=b1+(y2-b2)*n以上转换公式假设图形之间没有放大与缩小情况对地图来说,一般均应对地图进行缩放显示。假设地图显示比例尺为1/K,则坐标变换公式为:x1=a1+(x2-a2)*n/Ky1=b1+(y2-b2)*n/k在缺省情况下,a1=b1=a2=b2=0x1=x2*n/ky1=y2*n/k即x1=PDC-DPtoLP(x2)/ky1=PDC-DPtoLP(y2)/k若k=1,则x1=PDC-DPtoLP(x2)y1=PDC-DPtoLP(y2)课程设计题目之一:建立高斯坐标系编程实例:一幅A0幅面(914mm*1219mm)地图中绘制有点、线、面,实现地图的滚动、绘制、缩放、实际坐标显示等功能(在MM_LOMETRIC映射方式下)。模拟显示与打印等。课程设计题目之二:VC实现地图在用户坐标系下显示、缩放、滚动绘图、显示实际坐标等功能(CScrolMap.CPP)(MM_LOMETRIC)1、用户坐标系;原点A0幅面图左下角0点,X.Y.Z方向如图。地图单位mm(由用户定义)2、逻辑坐标系:原点A(0,0),位于屏幕左上角,X.Y方向如红笔所示,单位为逻辑单位,0.1mm/逻辑单位(与映射方式有关)3、设备坐标(屏幕坐标:视口坐标):原点(屏幕客户区左上角)X.,Y正方向如蓝笔所示,单位为设备单位(象素)Pixels(与映射方式无关)4、坐标转换:1)用户坐标(
本文标题:GIS设计与开发电子教案2014
链接地址:https://www.777doc.com/doc-8105706 .html