




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
地图设计与编绘上 机 实 习 报 告姓名:刘海岩学号:11400317中国地质大学(武汉)信息工程学院实习一 等高线的自动提取一、实习目的:了解空间数据文件的存储原理、读写方式、能自行设计程序,实现图形界面的缩放、移动等基本功能,并用户交互地完成等高线的自动提取。二、资料说明:文件数据等高距为10m。数据所描述的地区山体破碎、多丘沟、多斜坡其中斜坡多为凸形坡、谷地多为V形谷,等高距10m。文件内容:BEGIN1000/图幅比例尺/图幅左上角及右下角坐标值71011/等高线类型值110.000000/高程值4/等高线上含有的点数()/线上各点的坐标值()()()END三、实习工具:用C、VB、VC皆可。四、实习要求:1.显示文件中所有等高线,并用不同粗细的线显示不同类型的线型。2.调用对话框获取用户对新编图等高距的要求。3.符合要求的等高线用不同于原图的颜色显示。4.可在图形界面中实现显示区域的放大、缩小和移动,放大的范围以及移动的距离是好可以用鼠标确定。五、软件的设计过程:1. 程序在Visual C+环境下编码执行,调用MFC基本类库设计图形界面的基本框架,包括菜单、工具条、对话框等。并利用相应的事件处理机制,如输入文本、点击按钮、拖放鼠标等动作实现用户与程序的交互。2. 首先创建一个打开文件的对话框,设置所在文件的路径及文件名,用户确定后读取文件中的数据。文件的打开、读取操作用C语言语句实现,设定的指针*duqu按行读入数据,通过fscanf等语句读入缓冲区。3. 数据读入完毕后,Invalidate()语句重新调用Ondraw()函数更新图形界面,完成等高线的初始化显示,在此设置一标志位a,读取完毕时赋值为0,提示系统更新窗口。4. 创建一个新的对话框,input dia,以获取用户新的等高距数值。通过触发IDOK(即点击OK按钮),将文本框内输入的值传至w变量,依次将链表中各点高程值对w取作操作若余数0,则认为符合该高程距的要求,设置画笔peno,区别于原始色显示出来。5. 完成缩放、移动等功能。首先Crect re获取当前设备的坐标,简单缩放即是在确定缩放比的前提下,将视口width & height值加以变化:PDCSetMapMode(MM_ISOTROPIC);PDCSetviewport Org (rc. Left+ re. right)/2 mdx*fx, (rc.top+rc.bottom)/2+mdy*fy);鼠标的拖放区域放大则相对困难。首先设置鼠标左键按下和左键按下和左键放开的事件处理函数,获得以上两事件发生时的设备坐标值m_nstartZ及mnStartY。并求其差的绝对值mdx、mdy、传值至Ondraw函数,重新设置设备坐标系参数:PDCSet Viewport Org (mnstart Z-mdx /2,m-ns .tarty-mdy/2);值得我们注意的是地理坐标系原点与设备坐标系原点并不在同一位置,需要加以转化,地理坐标的范围在窗口坐标PDCsetwindoworg及PDCSet Window Ext中定义即可。七、程序的不足由于程序需要较好的交互式界面,故采用VC编程,而对Windows编程相关知识的局限性,想要达到得心应手的程度还需要很大的努力,程序中的众多不足也是令人非常遗憾的。1.变量设置多是public,虽然方便了值传递,但浪费了资源同时不能更好的体现面向对象的编程思想。2.文件操作在View.h和View.cpp实现,没有很好的利用MFC框架中的Doc.h和Doc.cpp。3.拖放鼠标实现特定的区域的放大时,拖动鼠标的位置还不能用动态矩形加以显示,给用户操作增加了不便。八、实习心得空间数据的图形显示是地理信息系统软件的重要功能之一。从大学二年级接触GIS软件开始,我们对图形转文件,文件转图形等功能都仅仅停留在含操作的层面,而存储原理、显示方式都相当模糊没有什么概念。我想作为GIS软件的设计人员,建立计算机处理的深层概念,从本质上把握程序是非常重要的。实习任务刚刚布置下来的时候,我们每个人都感觉“ ”的厉害,似乎完全无从下手,当问题一点点的展开又一点点的被突破时,我们才突然意识到简简单单一个实习却是综合了好几门课程的知识,真正踏下心来只有极个别问题超出了我们现有的知识水平。本次实习让我更多的体会到提取问题焦点的重要性,团队合作的重要性,确是受益匪浅!(附程度部分源代码)源程序清单:db 1 View. cpp /db 1View.cpp:implementation of the CDb1View class/#include” stdafx. h”#include”db1.h”#define MAX 500#include”db1Doc.h”#include”db1View.h”#include”input.h”#include”xuanqu.h”#difine_DEBUG#define new DEBUG_NEW#undef THIS FILE static char THIS_FILE=_FILE_;#endif/CDb1ViewIMPLEMENT_DYNCREATE (CDb1 View, CScroll View)BEGIN MESSAGE_MAP(CDb1 View, CScroll View)/AFX_MSG_MAP (CDb1View)ON_COMMAND (ID_CHAXUN,On Chaxun)ON_COMMAND (ID_DUQU, OnDuqu)ON_WM_LBUTTONDOWN()ON_WM_LBUTTONUP()ON_COMMAND(ID_reduce,Onreduce)ON_COMMAND(ID_move,Onmove)ON_COMMAND(ID_tuomag,Ontuomag)ON_ COMMAND(ID_mag,Onmag)COMMAND(ID_bi,Onbi)/AFX_MSG_MAP/Standard printing commandsON COMMAND(ID_FILE_PRINT,CsctollView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT,CscrollView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW,CscrollVies:OnFilePrintPreview)END_MESSAGE_MAP()/CDb1View construction/destructionty pedef struct point long double x;long double y;point;typedef struct eleint id;float height;int pnum;point po MAX;ele*next;eles;int1=50,y1=50,fmove,fmag,bi;float dx=800,dy=600,mdx=0,mdy=0;ele *q ,*p;ele *h=new ele;int a=1,i,w;float fx=1,fy=1;CDb1View:CDb1View()/TODO:add construction code herem_nStep=0;m_nStartX=m_nStartY=0;CDb1View:CDb1View()BOOLCDb1View:PreCreateWindow(CREATESTRUCT & cs)/ TODO:Modify the Window class or styles here by modifying / the CREATESTRUCT csreturnCscrollView:PreCreateWindow(cs);/ CDb1View drawingvoid CDb1View:OnDraw (CDC*pDC)CDb1Doc*pDoc=GetDocument();ASSERT_VALID(pDoc);CRect rc;GetClientRect(&rc);pDC-SetMapMode(MM_ISOTROPIC);if(fmag!=1)pDCSviewportOrg(rc.left+rc.right)/2+mdx*fx,(rc.top+rc.bottom)/2+mdy*fy);if(fmag= = 1) pDCSetViewportExt(rc.Width(),-rc.Height();/CRect rcMap;得到地图范围pDCSetWidowOrg(100700,53000);pDCSetWidowExt(13200/4.4fx,4400/3/fy); /TODO:add draw code for native data hereCbrush br,*plldBr;Cpen pen1,pen2,pen0,*poldPen;Pen1.CreatePen(PS_SOLID,2,RGB(0,0,255);Pen2.CreatePen(PS_SOLID,1,RGB(255,0,0);Pen0.CreateHatchHatchBrush(HS_CROSS,RGB(255,0,0);PoldBr=pDCSelectObject(&br);poldPen=pDC-SelectObject(&pen1);poldPen=pDC-SelectObject(&pen2);poldPen=pDC-SelectObject(&pen0);if(a=0&w=0)p=h-next;while(p!=NULL)for(i=0;ipnum-1;i+)x0=(int)(p-poi.x);y0=(int)(p-poi.y);x1=(int)(p-poi+1.x);y1=(int)(p-poi+1.y);if(p-id=71011)pDC-SelectObject(pen2);elsepDC-SelectObject(pen 1); pDCMoveTo(x0,y0); pDCLineTo(x1,y1); x0=(int)(ppoppnum-1.x); y0=(int)(ppoppnum-1.y); pDCMoveTo(x1,y1); pDCLineTo(x0,y0); q=p; p=pnext;if(a=0&w!=0) p=hnext; while(p!=NULL) for(i=0;Ippnum-1;i+) x0=(int)(ppoi.x); y0=(int)(ppoi,y); x1=(int)(ppoI+1.x); y1=(int)(ppoi+1.y);if(int)(pheight)%w= =0) pDCSelectObject(pen0); else pDCSelectObject(pen1); pDCMoveTo(x0,y0); pDCLineTo(x1,y1); x0=(int)(ppoppnum-1.x); y0=(int)(ppoppnum-1.y); pDCMoveTo(x1,y1); pDCLineTo(x0,y0); q=p; p=pnext; pDCSelectObject(poldPen); pDCSelectObject(poldBr); void CDb1View:OnInitialUpdate() CscrollView:OnInialUpdate(); Csize size Total; /TODO:calculate the total size of this view size Total.cx=sizeTotal.cy=100;SetScrollSizes(MM_TEXT,size Total);/CDb1View printingBOOLCDb1View:OnPreparePrinting(CprintInfo*pInfo) /default preparation reruru DoPreparePrinting(pInfo);viod CDb1View:OnBeginPrinting(CDC*/*pDC*/,CprintInfo*/*pInfo)/TODO:add extra initialization before printingvoid CDb1View:OnEndPrinting(CDC*/pDC*/,CprintInfo*/*pInfo*/) /TODO:add cleanup after printing/CDb1View diagnostics#ifdef_DEBUGvoid CDb1View:AssertValid()const CscrollView:AssertValid();vild CDb1View:Dump(CdumpContext&dc)comst CscrollView:Dump(dc);CDb1Doc* CDb1View:GetDocument()/non-debug version is inline ASSERT(m_pDocumentIsKindOf(RUNTIME_CLASS(CDb1Doc); retutn(CDb1Doc*)m_pDocument;#endif/_DEBUG/CDb1View message handlersvoid CDb1View:OnChaxun()Intput dia;If(dia.DoModal()= =IDOK) if(dia.m_chaxun= =10)MessageBox(“chaxun=10”); Else MessageBox(“chaxun!=10”); W=dia.m_chaxun;Invalidate(true); void CDb1View:OnDuqu() static chat BASED_CODE szFilter=DataFile (“*.txt)1*.txt1All Files (*.*)1*.*11”; CfileDialog fdlg(TRUE,”ext”,”txt”, )OFN HIDEREADONLY 1 OFN_OVERWRITEPROMPT,XzFilter,NULL); fdlg.DoModal();Cstring strFile = fdlg.GetPathName();Char symbol5;int scale;lint scale;long double scope4;hnext=NULL;q=h;FILE*duqu;dupu=fopen(strFile,”r”);fscanf(duqu,”%s”,symbol);fscanf(duqu,”%d”,&scale);facanf(duqu,”%lf,%lf,%lf,5lf”,&scope0,&scope1,&scope2,&scope3);while(a= =1) ele *p=new ele; pnext=NULL;fscanf(dupu,”%d”,&pid); if(pid= =7101111pid= =71012) fscanf(dupu,”%f”,&pheight);fscanf(duqu,”%d”,&ppnum); for(i=0;ippnum;i+)fscanf(duqu,”%lf,%lf”,&ppoi.x,&ppoi.y); /ele *q=new ele; qnext=p; q=p; /qnext=NULL; else a=0;free(p); fclose(duqu);Invalidate(true); void CDb1View:OnLButtonDown(UINT nFlags,Cpoint point) CclientDC dc(this); m_nStartX=point.x; m_nStartY=point.y; /m_nStep+;dc.MoveTo(m_nStartX,m_nStartY);CscrollView:OnLButtonDown(nFlags,point); void CDb1View:OnLButtonUp(UINT nFlags,Cpoint point) dx=-(m_nStartX-point.x); dy=-( m_nStartY-point.Y); m_nStep=0; m_nStartX=m_nStartY=0; if(fx20&fmag= =1&dx!=0) fx=fx*800/dx; fy=fy*600/dy; if(fmove= =1) mdx=dx; mdy=dy; fmag=0; Invalidate(true); CscrollView:OnLButtonUP(nFlags,point); void CDb1View:Onreduce() fx=fx/2; fy=fy/2; Invalidate(true); void CDb1View: Onmove() fmove=1; fmag=0; void CDb1View:Ontuomag() fmag=1; fmove=0; void CDb1View:Onmag() fx=fx*2; fy=fy*2; Invalidate(true);void CDb1View:Onbi() fx=1; fy=1; w=0; mdx=0; mdy=0; fmag=0;fmove=0; Invalidate(true)实习二 陆地河系的制图综合一、 实习内容:1:50万基本图向1:100万的转绘二、 实习目的:要求掌握小比例地形图河系的综合原则和方法。三、 资料说明:位于陕西省地区西安市附近,地势中间高两侧低。主流清水河由北流向东南方向,清水河支流九龙河、五里水、小曲河等弯曲较少、河流平缓。河系整体呈树枝状。密度分布基本均匀。四、 编绘方法:等大编绘,并结合已给定的长度、弯曲指标。五、 实习要求:1.河流选取的数量指标,以长度计0.81cm,原则上选2/3舍1/3。2. 河流的主流,主流的支流、支流的支流,用不同粗细的单线表示,共分34级。3. 跨度0.5mm高度小于0.6mm的河流弯曲应删除,原则上取1/2舍1/2。4.河流注记选用不同尺寸的左斜宋体。六、 实习步骤:A.绘制内图廊线;B.编绘河流,对主、支流实施制图综合。C.注记河流名称。字体大小应为底图字体的两倍。D.进行线的拓扑查错,实施结点平差自动剪断线等操作进行纠错。七、河流制图综合的心得与体会。1.陆地水系的综合包括河流、湖泊与水库、渠道与运河、井泉等几个方面。其中河流弯曲多、分布广、河网形状不一,密度不同,而在水泵的综合中尤为复杂。河流的选取是以长度指标为选取标准,同时应对该区河流适当分级,优选选主流及小河系的主要河源,再根据确定的标准对其逐渐加密、平衡。时令河必要时应舍出。河流的图形概括目的在于舍弃小的弯曲,突出弯曲的类型特征,保持各河段的弯曲对比关系。2.仔细观察图中河流,清水河具有多处套形弯曲、菌形弯曲以及复合弯曲,这就加大了综合的难度。为使河流能尽量接近实地的长度,概括应尽可能按弯曲的外缘进行。3.河流的取舍应建立在河系分级的基础上,在兼顾平衡的原则上舍出级别较低的支流,并保持各不同密度区间的密度对比关系。对多次修改中总结经验。4.使用MAPGIS矢量化时,将光栅图形放大至栅格可见,并结合快捷键的操作更容易。5.综合完成后,利用统论线参数将图廓、河流分层,图廓在第0层,水系在第5层。注记单独存放在第10层。实习三 城镇式居民地道路网的制图综合一、实习内容:1:50万基本图向1:100万的转绘。二、实习目的:要求掌握城镇式居民地道路网制图综合的原则和方法。三、资料说明:位于吉林省境内,最大的城镇式居民地榆树具属不规则平面图形。其它为农村居民地,多为街区式和散列式,密度中等。道路以铁路和简易公路为主,辅以乡村路、机耕路。四、编绘方法:等大编绘。五、实习要求:1.按城镇式居民地进行化简榆树具的居民地。选取方位物,包括测量点与独立地物。2.选取铁路及主要街道进行加绘,主要街道1cm次要街道0.5cm,选取次要街道时要有利于反映道路网的特征。3.概括居民地外部轮廓特征,不以比例尺表示的选1/2舍1/2,注意不能随意拉直不规则街道。4.正确表示出居民地建筑面积与非建筑面积的对比。空地4mm2应删掉或者合入街区中。5.农村居民地应反映出街区式和散列式的特点。六、 实习步骤:A.绘制内图廓线。B.化简榆树具及其它农村居民地,选取方位物。C.加绘铁路及主要街道。D、加绘河流及等高线。E、添加注记。F、拓朴查错。七、城镇居民地道路网制图综合的心得与体会。1、城镇式居民地概括的目的在于保持居民地平面图形的特征。包括居民地的外部轮廊。个人感觉将图幅缩小道先观察主要街道的分布,确定期保留与舍弃。 保留那些距离较长,与公路相连的,对街区平面结构有较大影响的街道。如榆树县主干路东侧街区我选择了一条南北路,两条东西路予以保留,其它则合并入街区。2 、图中除榆树县外多由不依比例尺
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025防盗门工程承包合同2篇
- 赠予车位合同范本
- 河南高层工程施工方案
- 承建喷泉工程合同范本
- (中职)《商务软文写作》期末考试试卷带答案
- 关于理想的演讲稿范文(5篇)
- 美食节日庆典活动策划
- 网约车市场发展前景趋势分析与市场策略及用户需求
- 浙江省浙南名校联盟2025-2026学年高二上学期开学联考思想政治试卷
- 模拟电路 试卷及答案
- YD-T 2664-2024 公用电信设施保护安全等级要求
- DL-T5002-2021地区电网调度自动化设计规程
- 2024年个人信用报告(个人简版)样本(带水印-可编辑)
- 个人替公司代付协议
- 20CS03-1一体化预制泵站选用与安装一
- 一例CAG循证护理查房
- 安全生产投入台账(模板)
- 委托书办理压力容器使用登记证
- 关于房产权属的案外人执行异议申请书
- 举升机检查表
- 高中创作性戏剧课程设计
评论
0/150
提交评论