📄 mapobjects开发技术 (vc++).htm
字号:
</A></TD>
<TD class=lframe-m-right height=16></TD></TR>
<TR>
<TD class=lframe-m-left height=16></TD>
<TD height=16><IMG src="MapObjects开发技术 (VC++).files/bullet.gif"
align=absMiddle> <A
href="http://www.gissky.net/gaindetail.asp?ID=13">利用Visual Basic
实现... </A></TD>
<TD class=lframe-m-right height=16></TD></TR>
<TR>
<TD class=lframe-m-left height=16></TD>
<TD height=16><IMG src="MapObjects开发技术 (VC++).files/bullet.gif"
align=absMiddle> <A
href="http://www.gissky.net/gaindetail.asp?ID=21">美国GIS的19个研究方向
</A></TD>
<TD class=lframe-m-right height=16></TD></TR>
<TR>
<TD class=lframe-m-left height=16></TD>
<TD height=16><IMG src="MapObjects开发技术 (VC++).files/bullet.gif"
align=absMiddle> <A
href="http://www.gissky.net/gaindetail.asp?ID=16">Palm
串行通讯GPS数据读取的实现 </A></TD>
<TD class=lframe-m-right height=16></TD></TR>
<TR>
<TD class=lframe-m-left height=16></TD>
<TD height=16><IMG src="MapObjects开发技术 (VC++).files/bullet.gif"
align=absMiddle> <A
href="http://www.gissky.net/gaindetail.asp?ID=7">如何将将以大地坐标(meter)存...
</A></TD>
<TD class=lframe-m-right height=16></TD></TR>
<TR>
<TD class=lframe-m-left height=16></TD>
<TD height=16><IMG src="MapObjects开发技术 (VC++).files/bullet.gif"
align=absMiddle> <A
href="http://www.gissky.net/gaindetail.asp?ID=10">《ArcGIS Spatial
A... </A></TD>
<TD class=lframe-m-right height=16></TD></TR>
<TR>
<TD class=lframe-m-left height=16></TD>
<TD height=16><IMG src="MapObjects开发技术 (VC++).files/bullet.gif"
align=absMiddle> <A
href="http://www.gissky.net/gaindetail.asp?ID=22">ArcGIS中坐标系统小议
</A></TD>
<TD class=lframe-m-right height=16></TD></TR>
<TR>
<TD class=lframe-m-left height=16></TD>
<TD height=16><IMG src="MapObjects开发技术 (VC++).files/bullet.gif"
align=absMiddle> <A
href="http://www.gissky.net/gaindetail.asp?ID=5">分幅地图拼接后期处理-----自己...
</A></TD>
<TD class=lframe-m-right height=16></TD></TR>
<TR>
<TD class=lframe-m-left height=16></TD>
<TD height=16><IMG src="MapObjects开发技术 (VC++).files/bullet.gif"
align=absMiddle> <A
href="http://www.gissky.net/gaindetail.asp?ID=46">GIS中的坐标系定义与转换
</A></TD>
<TD class=lframe-m-right height=16></TD></TR>
<TR>
<TD class=lframe-m-left height=16></TD>
<TD height=16><IMG src="MapObjects开发技术 (VC++).files/bullet.gif"
align=absMiddle> <A
href="http://www.gissky.net/gaindetail.asp?ID=12">ArcGIS83
Desktop安装图解 </A></TD>
<TD class=lframe-m-right height=16></TD></TR></TBODY></TABLE></DIV>
<TABLE cellSpacing=0 cellPadding=0 width="95%">
<TBODY>
<TR>
<TD class=lframe-b-left></TD>
<TD class=lframe-b-mid> </TD>
<TD class=lframe-b-right></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="95%">
<TBODY>
<TR>
<TD class=lframe-b-left></TD></TR></TBODY></TABLE></TD>
<TD height=411>
<TABLE cellSpacing=0 cellPadding=0 width="100%">
<TBODY>
<TR>
<TD class=mframe-t-left></TD>
<TD class=mframe-t-mid><SPAN class=mframe-t-text> >>
学习心得</SPAN></TD>
<TD class=mframe-t-right></TD></TR></TBODY></TABLE>
<TABLE height=132 cellSpacing=0 cellPadding=0 width="100%"
dwcopytype="CopyTableRow">
<TBODY>
<TR>
<TD class=mframe-m-left height=145></TD>
<TD class=gray height=145>
<TABLE height=98 cellSpacing=0 cellPadding=0 width="100%"
border=0><TBODY>
<TR>
<TD class=summary-title height=18>
<DIV align=center>MapObjects开发技术 (VC++) </DIV></TD></TR>
<TR>
<TD
style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; PADDING-TOP: 5px"
height=4>
<DIV align=right>作者: 富融公司 苏乐平 </DIV></TD></TR>
<TR>
<TD
style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; PADDING-TOP: 5px"
height=26>
<P><SPAN
id=yuyuzi>MapObjects是一组基于COM技术的地图应用组件,它由一个称为Map的ActiveX控件(OCX)和约45个自动化对象组成,在标准的Windows编程环境下,能够与其他图形、多媒体、数据库开发技术组成完全独立的综合性应用软件,是基于前端应用业务的良好的地图开发环境。
<BR><BR>MapObjects是全球最大的GIS软件供应商ESRI公司在业界最早推出的GIS软件组件,它起点高、功能强、结构优雅。ESRI在推出其每一个版本时,都采取了非常严谨慎重的态度。从1.0版本算起,MapObjects正式问世已经5年,才发展到2.1版本,可见每个版本质量控制之严格。事实上,MapObjects是全球范围内使用最广的GIS组件,也是潜在错误被最充分暴露并得以纠正的软件组件,其稳定可靠性无以置疑。有经验的程序员都知道,在软件开发过程中,稳定性压倒一切,而这正是MapObjects能被成功应用的重要前提和保证。
<BR><BR>作为ESRI公司GIS软件族的重要成员,凭借ESRI公司在GIS领域的领先技术和市场地位,MapObjects操作的数据资源与ESRI的旗舰产品ArcGIS完全兼容,从结构简练的桌面数据格式(Shape文件)到以拓扑关系为基础的经典ArcInfo
Coverage,以至基于数据库(DBMS)和ArcSDE基础之上的Geodatabase,都能够被MapObjects读取。除了矢量数据以外,MapObjects还能够读取多种格式的栅格数据,如BMP、TIF、JPEG、ArcInfo
Grid、Erdas
Image等。MapObjects本身也能够生成Shape文件格式的GIS数据,该格式已经成为GIS业界事实上的基于桌面应用的标准。采用MapObjects,能够最大限度地与主流GIS技术融合,保护用户在数据生产、功能开发、以及人员培训上所作的一切投资。
<BR><BR>1、
MapObjects的体系结构<BR>MapObjects可以说得上是最优雅简洁的GIS软件组件。我们这么说,是因为它以最少的接口提供了常用的GIS功能,甚至GPS的动态特性,同时做到了结构合理,简单明了,容易理解和扩展。与之相比,其他的GIS组件,要不是由于提供的功能过多而破坏了其内在的结构美并影响了用户扩展的灵活性,就是结构过于简单而使功能大大弱化。可以说,MapObjects在功能和结构两者之间,取得了完美平衡,体现出了软件的艺术性,给人带来愉悦的感受。
<BR><BR>1.1
数据结构<BR>从MapObjects对地图数据的组织方式来看,概念清晰,易于理解。它认为一个综合性的地图由多个图层构成,图层数据来源广泛,既可以是GIS矢量图层,也可以是CAD图层,甚至影像数据。对于GIS和CAD的矢量图层,其内部统一用记录集(Recordset)来表达,这样就抹平了各种不同格式数据之间在内存中的表达鸿沟,简化了程序员的数据观点。记录集正象关系数据库中的二维表,行表示每个要素、列表示每个属性。如果含有名称为
“Shape”的列,则该记录集表示的是地图要素,否则表示的是普通的数据库表格。这样,在数据结构内部就消除了GIS和MIS数据之间的差异,使程序员开发GMIS综合应用系统易如反掌。<BR><BR><BR><BR>Shape字段以面向对象的技术封装了要素的图形部分。它把图形划分为三种类型,即点、线、面。这些几何类型既简单又复杂,说它简单,是因为很容易理解,所有的图形归根到底都是由点、线、面构成的;说它复杂,是因为这些点、线、面并不是简单的点、线、面,实际上它引入了一个部件(Part)的概念,由点构成部件,部件由复合点构成、线和面则由部件构成。<BR><BR> <BR><BR>如果只有一个部件,则它是简单的线或面,如果有两个以上的部件,则构成复合线或面。例如夏威夷群岛,由很多小岛屿构成,但它是一个整体,其中的每个小岛都可以用Part来表示,多个Part构成的多边形放到一个Shape字段中。<BR><BR> <BR><BR>至于注记,则被描述为属性字段的自动标注。标注的位置由Shape字段中的图形要素决定,它可以是点、线或面,通常是线。标注的内容由普通属性表示,既可以是字符型,也可以是整型或浮点型,通常是字符型。这样,一切要素既可以按图形表示,也可以按其属性内容标注显示,甚至可以两者同时显示,地图显示和制图的方式是极为灵活的。
<BR><BR>1.2
功能接口<BR>再从MapObjects所提供的功能接口来看,常用的地图应用基本上都能实现,例如:<BR><BR>*
创建新的Shape文件<BR>* 更新属性或图形数据<BR>* 绘制点、线、椭圆、矩形和多边形等图形要素<BR>*
绘制描述性的文本注记<BR>* 地图简单点取查询、空间查询、相对位置查询、SQL逻辑条件查询等<BR>* 空间统计<BR>*
地图缩放和漫游<BR>* 丰富的绘图方式,如按值润色、分类显示、绘制密度图、产生含各类图表的专题图等。<BR>*
属性自动标注<BR>* 显示航空和卫星遥感影像<BR>* 动态显示实时或顺时数据,如GPS动态监测<BR>*
地址匹配<BR>* 投影变换<BR>* Buffer、Union、Intersect等空间分析算子
<BR><BR>通过调用这些接口,能够开发从简单的电子地图应用,至复杂的基于GIS/GPS/RS的3S应用。利用空间分析算子,甚至可以构造出具有一定复杂度的空间分析模型。由于提供了数据更新接口,用户能够扩展出自己的编辑工具,富融公司便基于MapObjects
2.0/2.0a/2.1扩展了近50种的编辑工具,使之能够满足更为广泛的应用要求。 <BR><BR>2、
MapObjects的开发过程<BR>MapObjects的使用和开发过程与其他的ActiveX控件没有两样,在Visual
Basic、Delphi、Visual
C++等能够支持控件开发的编程环境下,一旦把控件插入到编程项目中,就可以通过接口使用控件所提供的各种方法。
<BR><BR>由于MapObjects联机帮助和随机手册中的大部分编程说明都采用Visual
Basic作为代码示例,而Visual C++的说明相对较少,为了方便Visual
C++程序员的工作,以下的开发过程和代码示例使用Visual C++,在其他环境下的编程过程大致类似。
<BR><BR>以下说明均假设在Windows下已成功地安装了MapObjects控件。我们将构造一个简单的电子地图应用程序,它可以增加一个新图层,实现地图的放大、缩小,并且可以实现要素的定位功能。
<BR><BR>2.1 生成Visual C++编程项目<BR>使用Visual C++“File |
New”打开新建工程对话框,使用MFC
AppWizard(exe)产生一个新的MFC应用程序,我们把工程名称取为“mmap”,该向导一共有6步,前5步都按缺省选项,第6步把Basic
Class由CView改为CFormView,这样完成后产生的应用程序将有一个表单模板,其标识号为IDD_MMAP_FROM,初始状态是一行静态文本,内容为“TODO:在这个对话框里设置表格控制”(如果是英文版或选择的语言为英文,则提示换成英文)。把这行字删掉,以便在此表单中加入地图控件。
<BR><BR>2.2 加入MapObjects地图控件<BR>使用“Project | Add To Project |
Components and Controls...”菜单功能打开“Components and Controls
Gallery”对话框,从其“Registered ActiveX
Controls”文件夹下的已登记控件列表中找到“MapObjects 2.1 Map
Control”并按“Insert”按钮,系统将生成该控件及其自动化对象的一系列包裹类(Wrapper
Class),把第一个类名称由CMap1改为CMoMap,实现文件保持不变,即map.h和map.cpp。结束该对话框后,在控制条中会增加一个地图控件图标,把该图标插入到IDD_MMAP_FORM表单中。然后选中刚插入的控件图标,在用左手按住键盘的“Ctrl”键的情况下,右手双击鼠标左键,将弹出一个“Add
Member
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -