C开发MapInfo教程1

合集下载

mapinfo操作手册

mapinfo操作手册

跟我用mapinfo一、水深点的获得1、打开tab文件:11.tab2、新建一个表,如depth.Tab出现对话框:在add to current Mapper前打勾,表示添加到当前图层上;点击create,出现对话框:选中name,输入depth,随便取个名字,表示表中数据的名字,其他选项可不用管。

点击create,出现对话框:在file name处输入想保存的文件名,如depth,点击save。

软件窗口此时出现空白的内容,点击右上的小X,关闭图层。

注意不要点大X,关了mapinfo程序。

在工具栏点击图标:,对图层进行控制:出现对话框:在depth图层把能选的都选上,点击ok。

现在来看看工具栏上有哪些工具:main工具栏:上面4个是选取对象的图标,接下来是放大和缩小工具,第四行右边的手是移动地图位置的工具,第五行的I图表是显示和输入信息的工具,右边的是标签工具,第六行是把图件拿到其它软件的工具,类似copy,第七行左边的是图层控制工具,右边的是量距离的工具下面的几行不要管了。

Dra…工具栏: 第一行,画点和直线的工具第二行,画折线和弧线第三行,画多边形和圆第四行,画矩形和圆角矩形第五行,写文字下面几个是改变点、线、面、文字属性的工具现在,接着做下一步,将图放大到合适的大小,点击画点的工具图表,在图上水深位置画点,再点击i图标,输入信息,出现小对话框:点击depth:0这里,出现:在0这里输入水深:-5.0,一个水深点输入完毕。

再选中画点的图标,在第二个位置画一个点,并在上图中输入水深-1.9,第二个点完成。

重复n次,将所有的点输入完毕,记得随时save。

所有的水深点都输入完成后,选择菜单中的table/export…出现对话框:选择表depth,点击export,出现:输入文件名,如depth,点击save,在文件夹中出现2个新文件:depth.mif和depth.mid各水深点的坐标在depth.mif中,水深值在depth.mid中。

mapinfo教程(1)

mapinfo教程(1)

mapinfo教程(1)在计算机桌面式地图迅猛发展的今天,MapInfo作为GIS主要的桌面式地图系统继续引领新产品发展的潮流,致力于全方位满足计算机绘制地图的各种需求,该软件包含综合性的计算机地图绘制工具,可实现复杂的地理分析,使用户能够快速、准确、有效地完成创建和编辑地图的操作。

本章主要介绍GIS专业知识和GIS专业软件MapInfo 9.5的基本内容,以及简要介绍MapInfo 9.5软件工作界面,及管理地图文件和查看MapInfo窗口的方法和技巧。

本章学习要点, 了解地理信息系统基本知识, 了解MapInfo基本知识, 熟悉MapInfo 9.5基本功能和新增功能, 熟悉MapInfo 9.5工作界面, 掌握文件管理的方法, 掌握各窗口的创建方法由于地图在表达空间地理信息时具有精确、简洁、丰富、动态、灵活等特点,因此地图已经成为地理工作者普遍使用的地理语言,也是地理信息系统的最重要的数据源。

GIS事实上,地图也是地理信息系统向用户输出信息的重要形式之一。

因此,在学习1-1之前首先需要明确地理、信息、系统之间的相互关系(如图所示),以及通过这些相GISGIS 互关系形成的的含义和创建所具备的条件。

1.1.1 信息与信息系统信息是近代科学的一个专门术语,而信息系统则能为企业、部门或组织的决策过程提供有用的信息。

要了解地理信息系统,首先明确信息和信息系统所代表的含义。

1.信息与数据图1-1 GIS关系图在信息科学领域中,信息与数据不可分离,信息用记录在各种物理介质中的数据来表达,数据中所包含的意义就是信息。

数据只是信息的载体,并不等于信息。

只有理解了数据的含义,对数据做出解释,才能得到数据中所包含的信息。

通常在不会引起混乱的情况下,人们往往对信息和数据这两个术语的使用不加以严格区分。

信息信息是用文字、数字、符号、语言、图像等介质,表示事件(或事物、现象)的内容、数量或特征,从而向人们(或系统)提供关于现实世界新的事实和知识。

mapinfo教程

mapinfo教程

Mapinfo教程
引言
Mapinfo是一款地理信息系统(GIS)软件,它主要用于地图创建、地理数据分析和空间数据可视化。

它提供了一系列功能强大的工具,使用户能够轻松处理和分析地理数据。

本教程将介绍Mapinfo的基本概念、常用功能和操作步骤,帮助初学者快速上手使用Mapinfo。

目录
1.安装与配置
2.Mapinfo界面介绍
1.工作区
2.菜单栏
3.工具栏
3.创建和编辑地图
1.创建新地图
2.导入地理数据
3.创建图层
4.编辑图层
4.地理数据分析
1.空间查询
2.属性查询
3.空间分析
5.数据可视化
1.创建主题图
2.图表制作
1. 安装与配置
在开始使用Mapinfo之前,您需要先下载和安装Mapinfo 软件。

您可以到Mapinfo官方网站下载安装程序,并按照安装向导进行操作。

一旦安装完成,您可能还需要配置一些软件设置,如选择语言、设置默认地图坐标系等。

2. Mapinfo界面介绍
2.1 工作区
Mapinfo的工作区包括地图窗口、图层列表和信息窗格。

地图窗口是您进行地图浏览和编辑的主要区域,它显示了地理数据的可视化效果。

图层列表用于管理和显示地图中的不同图层,您可以通过勾选或取消勾选图层来控制其可见性。

信息窗格则显示了与地图相关的属性信息和统计数据。

2.2 菜单栏
Mapinfo的菜单栏包含了各种功能命令和工具选项,您可以使用这些选项进行地图创建、数据分析、编辑等操作。

常用的菜单栏选项包括。

mapinfo操作

mapinfo操作

一、MapInfo表的管理与使用1、表的创建1.1创建表结构操作步骤:打开MapInfo,选取【文件】>【新建表】,出现“新建表”对话框,如图,有三个选项,我们选择第2个选项【打开新的地图窗口】,单击【创建】,则先打开“新表结构”对话框。

按下列内容创建“土地利用图”的表结构,如下图所示:新表结构对话框右边的选项意义很明显。

可以增加和移去字段,可以调整字段位置,这有利于数据浏览。

新建表结构时要设定坐标投影,系统默认的投影是经纬度。

而城市规划大于万分之一的图纸是非地球投影,X、Y坐标值以m作单位。

还要根据地图的最小最大X、Y坐标设定地图窗口的有效作图范围,在边界之外的地图对象不能显示。

注意:地图窗口的投影一经设定就不能改变。

如果确需改变投影,可对表文件“另存来改变投影,包括改变作图范围”1.2创建地图单击绘图工具栏中的多边形工具,在地图窗口中绘出4个多边形,如下图。

(注:如果“土地利用图”未打开,应单击【文件】>【打开】找到该图层打开。

)1.3给地图对象输入属性数据单击信息工具按钮,再在地图上点击一个地块,将弹出一个信息框。

信息框中的字段是按表结构设定的字段排列的,按规划的地块编号、用地性质、面积等依次键入数据并逐块执行输数据的操作。

1.4查看数据浏览表浏览表是一种电子表格,表中的每一行包含一条记录,该记录的每一列又包含某个字段的信息。

通过选取【窗口】>【浏览窗口】,再选取“土地利用图”,就打开该图层的浏览表,如下图所示。

表中可看到相对于4个地块的4条记录,每条记录包含的字段值。

如果将地图窗口与浏览窗口同时显示在屏幕上,我们就可以进行图与表的双向查询操作。

应用选择工具单击图上的一个地块,则表示相应的记录会突显。

相反,在表上单击一条记录,则图上的相应地块会突显。

以上就是创建MapInfo表文件的全过程,实际工作中只是数据更多、更具体而已。

2、表的修改第一次建立表结构时,可能考虑不全面,在使用中常发现要修改,比如:需要增删字段、改变字段类型及宽度、调整字段顺序、确定索引、改变索引、改变投影、扩大作图范围等。

mapinfo详细教程(共124张PPT)

mapinfo详细教程(共124张PPT)

移动一个地图窗口
放大工具
点击并拉一个框
放大框中的区域
缩小工具
点击并拉一方框
当前地图缩小到方框大小,可以显示更多地图内 容
缩放层
设置在地图窗口中的某些层在特定的缩放范围显示
缩放与地图窗口中心的距离有关
漫游工具
该工具可以在窗口中重新地位地图和布局
改变视图工具
该工具允许你在窗口中变换缩放、比例尺和地图中 心
*.TAB – 包含父表的信息 *.QRY – 包含查询语句
保存的查询表与产生它的父表仍然保持热连 接
当保存的查询表打开的时候,父表会自动打 开
保存 SQL 语句
保存在SQL 选择对话框中的模板选项 当我们保存模板的时候会创建一个 *.QRY 文
件 查询保持与父表的热连接 为了运行查询父表必须打开
Lesson 4 – 小结
现在你已经学会了
查找地图对象(Find a map object) 保存装饰对象(Save cosmetic objects) 选取地图对象或在浏览器中选取记录(Select
map objects and records in a Browser) 显示质心(Display centroids) 创建和修改图表(Create and modify a graph) 建立一个图表并保存到一个工作空间中(Build a
显示整个图层内容
Australia 层中的所有地图对象都能看到
Lesson 2 – 小结
现在你已经知道下列操作
打开一个工作空间(Open a workspace) 缩放层(Zoom Layer) 缩放和平移地图(Zoom and pan around a Map
window) 利用信息工具钻取地图对象对应的数据 利用显示/隐藏统计分析数据

实习一_MapInfo_入门基本操作

实习一_MapInfo_入门基本操作

地图对象的编辑与修改
——移动圆弧端点
使用整形命令改变圆弧的端点
用选择工具选中圆弧并选择整形,抓住圆弧的任 一端,将它移至所需位置。对圆弧整形不会改变 它所属的椭圆形状,只改变它的端点
地图对象的编辑与修改
——选择多个节点
按住shift键进行多个节点的选择
地图对象的编辑与修改
——对齐节点
按一下 s 键,使对齐节点选项可用, MapInfo在移动节点时搜索这些节点, 当光标到达与对象的某个节点 的某段距离之内时,MapInfo自动 把光标与该节点对齐
图层是MapInfo地图的基本构筑块
实习目的
(1)知道MapInfo图层的概念
(2)理解表和图层的关系
(3)会控制图层的显示、编辑和可选择等操作
打开”图层控制”对话框 的方法: ① 选择”地图”菜单中的”图层控制”命令; ② 通过主工具栏中的图层控制工具 。
控制图层的属性
实 际 操 作 演 示
图层可选择但不可编辑——〉只能查看这些属性 图层可选择也可编辑——〉可编辑这些属性 编辑——〉获取信息
地图对象的编辑与修改
——对象整形
可对区域、折线、线、圆弧和点进行整形
选择工具 编辑 整形
绘图工具条上的“整形”按钮
MapInfo在所有折线或多边形的两条线段连接处都绘制节点
整形对象可移动节点、增加节点或从对象中删除节点
——改变符号对象的 类型、颜色、大小等
增加节点按钮——在 “整形” 情况下才可用
线样式按钮 ——改变线对象的 颜色、宽度和类型
区域样式按钮
——改变区域对象的填充图案和边框
文本样式按钮 ——改变文本的字体、 大小、颜色和属性
地图对象的绘制

《mapinfo全部教程》课件

《mapinfo全部教程》课件
《MapInfo全部教程 》PPT课件
目 录
• MapInfo软件简介 • MapInfo基础操作教程 • MapInfo进阶操作教程 • MapInfo高级应用教程 • MapInfo常见问题解答
CHAPTER 01
MapInfo软件简介
MapInfo软件的发展历程
1986年,MapInfo公司成 立,推出首款地图信息系 统软件。
2000年代,MapInfo不断 推出新版本,并拓展全球 市场。
1990年代,MapInfo软件 逐渐成为地理信息系统领 域的领导者。
2010年代,MapInfo软件 持续创新,并与其他技术 进行集成。
MapInfo软件的主要功能
地图浏览与缩放
支持多种地图数据格式,提供流畅的地图浏 览和缩放功能。
感谢您的观看
数据查询与分析
支持属性数据和空间数据的查询、统计和空 间分析功能。
地图标注与符号化
提供丰富的标注、符号和图层样式,满足各 种地图表达需求。
数据导入与导出
支持多种数据格式的导入和导出,便于与其 他软件进行数据交换。
MapInfo软件的应用领域
城市规划与管理
用于城市规划、土地利用、交通管理等方面的数据可视化与分析。
生动和立体。
MapInfo地图的图层管理
创建和管理图层
在MapInfo中,用户可以创建多 个图层,并对每个图层进行单独 管理,包括添加、删除、隐藏等 操作。
设置图层叠加顺序
用户可以设置图层的叠加顺序, 以控制不同图层之间的显示关系 ,实现更加复杂的地图表达。
调整图层透明度
通过调整图层的透明度,用户可 以在同一图层上叠加多个要素, 以实现更加丰富的地图信息展示 。

《mapinfo全部教程》课件

《mapinfo全部教程》课件

1 系统配置
了解MapInfo在计算机上的硬件和软件要求。
2 安装步骤
3 许可证激活
逐步指导您如何正确安装MapInfo软件。
激活您的MapInfo软件以获取完整功能。
MapInfo界面布局及主要功能区介绍
主界面
熟悉MapInfo的用户界面布局 和常用功能区。
图层控制
掌握如何管理和控制地图的图 层。
《mapinfo全部教程》PPT 课件
简介:本课程提供完整的MapInfo培训,包括基础概念、主要功能、安装方法、 界面布局、数据处理、地图制作和分析等内容,帮助您快速掌握MapInfo。
MapInfo基础概念介绍
1 GIS技术
了解地理信息系统的基 本概念和作用。
2 MapInfo软件
介绍MapInfo软件的起 源和应用领域。
属性表
了解地理数据的属性表和数据 编辑功能。
MapInfo数据类型和数据格式介绍
1 矢量数据
介绍点、线、面等矢量数据类型及其应用。
2 栅格数据
了解栅格数据的特点和在空间分析中的应用。
3 数据格式
支持的数据格式,如Shapefile、GeoTIFF等。
MapInfo数据导入和导出方法
1
数据导入
从不同的数据源导入各种数据文件。
3 空间数据
学习地理信息的数据模 型和空间数据存储。
MapInfo的主要功能和特点
地图制作
创建令人惊叹的地图,展示数据的空间关系。
空间分析
进行空间查询、缓冲区分析和路径规划等高 级分析。
数据编辑
编辑和更新地理数据,保持数据的准确性。
报告生成
生成高质量的报告和图表,展示数据分析结 果。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C#开发GIS应用简明教程2009-11-15 来自:CSDN Blog 字体大小:【大中小】摘要:这篇是C#开发GIS应用简明教程,从工具开始将其,包括设计窗体、创建永久图层等等。

希望本文能对大家有所帮助。

C#开发GIS,这里将介绍MapX为开发人员提供一系列的工具,包括C#对MAPX图元的编程技术。

这些工具的使用,可以通过MapX的帮助文档中查到。

1.工具(ToolConstants)MapX为开发人员提供一系列的工具,这些工具的作用各有不同,我们通过开发一个应用程序来了解这些工具的作用,至于这些工具的具体说明,可以在MapX的帮助文档中,通过查找"Available Standard Tools" 看到相应的解释.一些MapX的相关资料也有介绍.在.NET编程环境中新建一个C#的WindeosApplication(Windows应用程序)项目,然后在菜单中选择”项目/添加引用”,打开如下图的窗口,在窗口中选择COM标签,在组件名称列表中双击MapInfo MapX V5.单击"确认"按钮,将Map5控件加入到.Net的工具箱中.接着,将MapInfo MapX V5 控件画到窗体上,再在窗体上画一个ComboBox控件comboBox1.如下图:双击设计窗体,编写Form1_Load代码如下:private void Form1_Load(object sender, System.EventArgs e){ArrayList ToolsList=new ArrayList();ToolsList.Add(MapXLib.ToolConstants.miArrowTool);ToolsList.Add(MapXLib.ToolConstants.miCenterTool);ToolsList.Add(abelTool);ToolsList.Add(MapXLib.ToolConstants.miPanTool);ToolsList.Add(MapXLib.ToolConstants.miPolygonSelectTool);ToolsList.Add(MapXLib.ToolConstants.miRadiusSelectTool);ToolsList.Add(MapXLib.ToolConstants.miSymbolTool);ToolsList.Add(MapXLib.ToolConstants.miTextTool);ToolsList.Add(MapXLib.ToolConstants.miZoomInTool);ToolsList.Add(MapXLib.ToolConstants.miZoomOutTool);comboBox1.DataSource=ToolsList;}以上代码通过一个数组ToolsList,将MapXLib的工具加入到comboBox1中.MapX还有一些其它的工具,它们的作用是往地图上加上点,线,多边型和圆.因为这些工具要求有操作图层,一并在介绍图层的时候介绍.关于ArrayList的用法,请参考C#的有关资料.接着,双击comboBox1,并编写代码如下private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e){axMap1.CurrentTool=(MapXLib.ToolConstants)comboBox1.SelectedItem;}应注意,在C#中必须要显式地把comboBox1的选择项目SelectedItem(数据类型为object)转换为MapXLib.ToolConstants.因为ToolConstants是MapX自己定义的一个枚举数据类型,C#不能自动完成这种枚举成员变量到object的数据转换.编译执行程序,从comboBox1中选择不同的工具,在地图上进行操作,你可以了解到MapX 工具集的强大功能.实际上,MapX提供的工具集就好像Photoshop,AutoCAD的工具栏一样,为你提供了一些控制地图的工具.但是,在开发GIS的时候,这些工具是不能完全满足要求的.所以,还应该学会自定义工具.下面,通过一个在地图上测距的例子,来介绍一下如何在C#下自定义MapX工具如前所述建立一个C#的Windows应用程序并将Mapinfo MapX V5 控件加到窗体上.并加入一个Button控件button1.将button1的Text属性改为"测距",再在窗口中放上两个Label控件label1,label2,将它们的Text属性设置为""空字符串,如下图:双击设计窗体,编写Form1_Load代码如下:private void Form1_Load(object sender, System.EventArgs e){axMap1.CreateCustomTool(100,MapXLib.ToolTypeConstants.miToolTypePoly,MapXLib.CursorConstants.miCrossCursor,null,null,null);}在加载窗口的时候,我们定义了一个工具.它的编号是100(不要和MapX本身的工具编号重复),它的类型是一个多义线,采用十字光标.关于此函数的用法,建议查看MapX的开发手册和相关资料.现在我们定义了一个编号为100的工具,可以在程序中使用它了.双击设计窗体中的button1,编写它的Click事件处理代码如下:private void button1_Click(object sender, System.EventArgs e){axMap1.CurrentTool=(MapXLib.ToolConstants)100;}现在编译运行,单击button1,就可以在地图上使用这个工具了.但是还有一部分重要的代码没有完成:测距!完成测距功能的代码在C#使用MapX开发GIS中非常具有代表性,也比较有难度.我在首次使用C#+MapX开发GIS的时候,被这个问题困扰了很久.项目经理也来研究,过两天说有结果了,但他给出的例子根本就行不通.当然,会了就不难了.其实,也很简单.首先,在窗口类中声明两个私有全局变量以保存测出的距离和总距,注意声明代码的位置: public class Form1 : System.Windows.Forms.Form{private AxMapXLib.AxMap axMap1;private System.Windows.Forms.Button button1;private bel label1;private bel label2;////// 必需的设计器变量。

///private ponentModel.Container components = null;private double Dis=0,DisSum=0;......现在来编写工具的事件.注意,在MapX画多义线的时候,它触发消息的方式和一般的工具是不同的,首先,它并不是用鼠标一点击就完成了的,还可以继续画下去,所以,不应该在MapX 控件的ToolUsed事件中编写,而应该在PolyToolUsed事件中实现测距.代码如下:private void axMap1_PolyToolUsed(object sender, AxMapXLib.CMapXEvents_PolyToolUsedEvent e){MapXLib.PointsClass pts=new MapXLib.PointsClass();switch(e.flags){case (int)MapXLib.ToolFlagConstants.miToolInProgress:pts=(MapXLib.PointsClass)e.points;Dis=axMap1.Distance(pts._Item(pts.Count-1).X,pts._Item(pts.Count-1).Y,pts._Item(pts.Count).X,pts._Item(pts.Count).Y);DisSum+=Dis;break;default:Dis=0;DisSum=0;break;}label1.Text="距离:"+Dis.ToString("#.00");label2.Text="总距"+DisSum.ToString("#.00");}这段代码虽短.但要注意的地方很多.首先,定义一个MapXLib.PointsClass类型的变量pts,注意,是PointsClass,不是PointClass.前者是点集,后者是点.为什么要增加那么一个变量呢?因为MapX的PolyToolUsed事件的返回参数e的成员points不是MapXLib.PointsClass类型,而是object.类型.所以需要这么一个变量来转换它,当然,你也可以在程序使用pts的地方直接使用(MapXLib.PointsClass)e.points,但那样一来程序就比较难懂了;其次,要判断事件的标识e.flags的值,它指出工具当前的状态,是刚开始画多义线呢,还是正在画多义线,或者已经结束了,或者结束退出.我们只要在画的时候测距就可以了.其它时候将距离和总距都设置为0;接着,还要注意的是e.points的点数据保存方式,e.points首先是一个object,当在画多义线的时候,它被初试化为一个MapXLib.PointsClass的变量,并以二维数组的方式保存点集.这个数组是从1开始的,而不是从0开始的.它保存了多义线上每个转折点的坐标,鼠标每点一下,就增加一个新的数据到点集,我们计算最后一条直线长度,应该从这个数组的末尾往前取.计算好距离以后再加入到总距中.许多测距的程序例子都要做一个循环,其实是不必要的.最后,请注意数字转换到字符串的格式问题.在这个例子中我们保留两位小数.补充一点,因为没有设置地图的地理坐标系统,所以测出来的距离单位是英里,如果要改为公里,把MapX控件的MapUnit属性改为miUnitKilometer就可以了.要提高测量精度,除了可以通过转换格式的时候增加小数位,还应该注意到地图的测绘精度.否则,再多的小数位也是没有意义的.1.建立一个应用程序,加入MapX控件和一个ComboBox控件,两个:Label控件,在ComboBox中加入第一个例子中的所有工具和测距工具,在ComboBox中选择测距工具时实现测距功能.2.将测距工具的光标改成箭头光标.并以米为单位显示测距数据.3.图层和图元(Layers and Features)有关图层和图元的概念,请参照相关资料.图层的应用分为几个方面,我们分别加以介绍.1)图层的创建:创建永久图层:在C#中,使用以下方法创建永久图层:yer lyr;lyr=yers.CreateLayer("MyLayer","D:\\MapTest\\MyLayer.Tab",0,32,axMap1.DisplayCoo rdSys);当执行这两句程序时,在指定的路径生成了一系列文件.它们是:MyLayer.Dat:图层的数据文件,它保存的是图层的数据库数据;MyLayer.ID:图层数据的唯一的,自动生成的编码,用以区分不同的图元;MyLayer.IND:图层数据的索引文件,以实现图层上图元的快速查找;MyLaer.MAP:图层上图元的图形数据;MyLaer.TAB:这是一个文本文件,它的作用是将图层的有关信息保存起来,供GST地图文件或其它程序调用图层.用记事本打开MyLayer.TAB文件,看到如下内容:!table!version 450!charset WindowsSimpChineseDefinition TableDescription "MyLayer"Type Native charset "WindowsSimpChinese"Fields 1GEONAME char (32) Index 1 ;第一行总是"!table",说明这是一个图层表的文件;第二行指出图层文件的版本号,MapInfo MapX 5.0生成的图层版本号是450;第三行指出生成图层的操作系统;接着是对图层的定义段:首先指出图层的描述,就是我们上面程序代码中的"Mylayer".接着说明了字符集类型是简体中文;然后指出表格中只有一个字段,这个字段的名称是"GEONAME",是长度为32的字符类型字段,在表中的列索引为1.2)添加现有的图层:添加现有图层的方法和一般的程序语言没有很大的区别,我们在当前图层上添加刚才创建的永久图层,程序代码如下:yerInfo li;li=new yerInfoClass();li.Type=ayerInfoTypeTab;li.AddParameter("FileSpec","D:\\MapTest\\MyLayer.tab");li.AddParameter("Visible",false);li.AddParameter("AutoCreateDataset",true);li.AddParameter("DatasetName","MyLayer");yers.Add(li,0);yersDlg("","");axMap1.SaveMapAsGeoset("测试","D:\\MapTest\\MyMap.GST");在程序的最后,我们显示了图层信息对话框,以观察图层是否已经添加到当前的地图中.可以看到,地图中添加了我们创建的图层"MyLayer".放在第0层.然后,将地图保存在一个MyMap.GST的地图文件中,这个地图的标题是"测试".3)移除图层:好,接着我们上面做的工作,将工程的axMap1的GeoSet属性设置为刚刚生成的地图文件: "D:\MapTest\MyMap.GST".现在我们将MyLayer从地图中移除.添加一个按钮,在按钮的Click事件中编写如下代码:yersDlg("","");yers.Remove(1);yersDlg("","");我们使用两次显示图层对话框的方式查看程序的效果,应该注意的是在Remove第0层的时候使用的是Remove(1),如果不清楚图层的位置,就要作一个循环,将图层的位置取出来再移除,如下:int lyrind=0;yersDlg("","");for( int i=1;i{if (yers[i]._Name.Trim()=="MyLayer"){lyrind=i;break;}}yers.Remove(lyrind);yersDlg("","");移除操作只在内存中进行,也就是说,程序并不删除任何文件,也没有将图层真正地从地图集合中去掉,当程序重新启动的时候,MyLayer图层仍然在地图中.3)移除所有图层:使用yers.RemoveAll();就可以移除所有图层,用法和Remove相似.4)图层定位:和其它编程语言一样,使用axMap1.Move(1,2)函数就可以将图层的位置改变.5)创建临时图层临时图层和永久图层不同,它只存放在内存中,当关闭程序以后该图层将不存在.在这里我们将使用LayerInfo对象来创建临时图层,这和传统的MAPX程序相近,但是引入了C#编程的一些特色:yerInfoClass li=new yerInfoClass();MapXLib.Features ftrs=null;MapXLib.FieldsClass flds=new MapXLib.FieldsClass();MapXLib.Fields Myflds=null;MapXLib.Dataset dts=null;flds.Add("State","State_Name",MapXLib.AggregationFunctionConstants.miAggregationSum,MapXLib.FieldTypeConstants.miTypeString);dts=axMap1.DataSets.Add(MapXLib.DatasetTypeConstants.miDataSetLayer,yers._Item(1),"MyLayer",0,0,0,flds,false);Myflds=dts.Fields;ftrs=yers._Item("USA").Selection.Clone();li.Type=ayerInfoTypeTemp;li.AddParameter("Name","USA Temp Layer");li.AddParameter("Fields",Myflds);li.AddParameter("Features",ftrs);yers.Add(li,1);yersDlg("","");这段程序有两个关键的地方:一个是在C#中DataSets.Add的用法,在许多编程语言中,都可以使用空的参数或者干脆不用参数来调用这个函数,但是在C#中是不行的,必须8个参数全部指定.而且,还应该事先初始化Fields参数.这个函数的使用涉及到许多方面的知识,包括对MAPX相关概念的理解和C#编程的认识,是一个很重要,也比较难掌握的技术.后面的章节中我们还会作进一步的探讨.另一个是li.AddParameter和li.Type的配合使用问题,这在许多的MAPX书籍中都有论述,此处不再重复.以上程序最好能自己多琢磨琢磨.才能更好地掌握C#开发GIS的要领.6)缩放图层:所谓的缩放图层,并不是指将单个图层缩放.而是指定图层的可见范围比例,例如,设置一个图层在缩小显示大于5英里的时候隐藏.小于5英里的时候显示.和其它编程语言一样,只要设置Layer的ZoomMin和ZoomMax就可以了.7)显示整个图层:这里要提及的一个技巧是在C#下面怎样显示整个图层.众所周知,在VB下面只要:Map1.Bounds = yers("USA").Bounds一句程序就可以轻松实现.但是要是在C#中这样写的话,百分百会出错.其实,这里有一个小小的技巧,聪明的你一定能看出来:axMap1.CtlBounds=yers._Item("USA").Bounds;8)在图层上绘制永久图形:我们在介绍工具的时候,有一些工具没有介绍,这些工具其实是用来在图层上创建永久图形对象的(图元).当在图层上绘制了图形以后,这些图形将以数据记录的形式保存在图层表中,也就是创建了一个图元.如果不想保存图元,可以在临时图层里绘制.yers._Item("USA Temp Layer").Editable=true;yers.InsertionLayer=yers._Item("USA Temp Layer");axMap1.CurrentTool=MapXLib.ToolConstants.miAddLineTool;上面的程序使用了画线的工具,在地图上拖动鼠标就可以在临时图层上画线了.这些工具使用的前提是必须指定axMap1的插入图层(InsertionLayer).才能在图层表中插入数据.关于图层的关键技术就介绍到这里,掌握了这些技术以后,在作进一步的研究时,例如动画图层和绘制图层的开发,遇到的困难应该不大.下面我们介绍C#对MAPX图元的编程技术.9)在图层上创建图元:根据MAP Info提供的MapX 5.0开发手册,创建图元有两种方法,用两段代码说明这两种代码在C#的实现方法:第一种实现方法:直接使用Feature类创建图元MapXLib.Style sty=new MapXLib.StyleClass();MapXLib.Feature ftr=new MapXLib.FeatureClass();ftr.Attach(axMap1.GetOcx());ftr.Type=MapXLib.FeatureTypeConstants.miFeatureTypeText;sty.TextFontColor=255;sty.TextFont.Size=12;ftr.Style=sty;ftr.Caption="New Feature";ftr.Point.Set(axMap1.CenterX,axMap1.CenterY);yers._Item("US Top 20 Cities").Style=sty;ftr=yers._Item("US Top 20 Cities").AddFeature(ftr,new MapXLib.RowValuesClass()); ftr.Update(ftr,new MapXLib.RowValuesClass());有几个要注意的地方:ftr.Attach(axMap1.GetOcx());如果在VB6下,这句程序应该是这样的:ftr.Attach Map1从这里可以看到在C#中因为严格的类型管理所带来的一些变化.如果不进行GetOcx()的转换,即使在下也是错误的.ftr=yers._Item("US Top 20 Cities").AddFeature(ftr,new MapXLib.RowValuesClass());我们在这个程序中加入了一行空的数据,这也就代表着我们加入的图元不包含任何数据信息.这是为了在介绍图元的时候方便大家掌握,并不意味着这样增加图元就不能将数据保存进去,实际上,通过设置一个新的RowValues变量,是可以将数据信息保存到图元中的.我们将在后面的章节中介绍如何将数据保存在图元中.ftr.Update(ftr,new MapXLib.RowValuesClass());这句程序的作用是将创建的图元保存到图层表中,这种保存是永久保存的.除非是在临时图层上增加的图元,否则下次打开地图文件的时候,将看到创建的图元仍然保留在地图上.因此,在对图元操作之前请备份好地图文件,避免不必要的损失.另外,关于图元的类型(Type)和风格(Style),应该和其所在的图层相对应,比如上面程序中关于Type和Style的设置,都是和"US Top 20 Cities" 图层的类型对应的.有关类型和风格的设置,请查阅相关手册.第二种实现方法:使用FeatureFactory创建图元MapXLib.Feature ftr=new MapXLib.FeatureClass();MapXLib.Point p=new MapXLib.PointClass();p.Set(axMap1.CenterX,axMap1.CenterY);ftr=yers._Item("US Top 20 Cities").AddFeature(axMap1.FeatureFactory.CreateText(p,"New Feature",MapXLib.PositionConstants.miPositionCC,new MapXLib.StyleClass()),new MapXLib.RowValuesClass());这段代码和上面和第一种实现方法类似,我们在这里不再设置图元的Type和Style.FeatureFactory类似于设计模式中的Factory模式,从它可以产生各种类型的图元,这个过程相当于设置了图元的Type.10)查找图元:查找图元是很简单的,可以用下边的代码实现:MapXLib.FindFeature fRes=null;fRes=yers._Item("US Top 20 Cities").Find.Search("New York","");axMap1.CenterX=fRes.CenterX;axMap1.CenterY=fRes.CenterY;上面这段代码将找到的图元放置在地图中央.这里要注意的是不能使用MapXLib.FindFeature fRes=new MapXLib.FindFeatureClass();来创建FindFeature对象,否则将会出错:"带有CLSID {436052C3-43E3-11D0-83EB-00AA00BD34FC}的COM对象无效或未注册。

相关文档
最新文档