mapinfo是什么软件能简单介绍一下么
Mapinfo是美国Mapinfo公司1986年推出的桌面地图信息系统,至今已从最初的Mapinfo for Dos 1.0发展到了Mapinfo Professional 6.0。 Mapinfo产品定位在桌面地图信息系统上,与Arc/Info等大型GIS系统相比,因Mapinfo图元数据不含拓扑结构,它的制图及空间分析能力相对较弱,但对大众化的PC桌面数据可视及信息地图化应用来说,Mapinfo小巧玲珑,易学易用,价位较低,是一个优选GIS产品。Mapinfo提供了自己的二次开发平台,用户可以在平台上开发各自的GIS应用。二次开发方法归结起来有三种,它们是基于MapBasic的开发、基于OLE自动化的开发及利用MapX控件的开发。从早期的MapBasic到目前的MapX4.5,Mapinfo上的GIS系统开发变得越来越高效、简捷,下面介绍如何利用MapBasic、OLE自动化和MapX开发GIS应用系统。
一、利用MapBasic开发
MapBasic是Mapinfo自带的二次开发语言,它是一种类似Basic的解释性语言,利用MapBasic编程生成的*.mbx文件能在Mapinfo软件平台上运行,早期的Mapinfo二次开发都是基于MapBasic进行的。MapBasic学起来容易,用起来却束缚多多,无法实现较复杂的自定义功能,用它来建立用户界面也很麻烦,从现在角度看,MapBasic比较适合用于扩展Mapinfo功能。
二、利用OLE自动化开发
1.建立Mapinfo自动化对象
基于OLE自动化的开发就是编程人员通过标准化编程工具如VC、VB、Delphi、PB等建立自动化控制器,然后通过传送类似MapBasic语言的宏命令对Mapinfo进行操作。实际上是将Mapinfo用作进程外服务器,它在后台输出OLE自动化对象,供控制器调用它的属性和方法。
OLE自动化开发的首要一步就是建立Mapinfo自动化对象,以Delphi为例(后面都是如此),你可设定一个Variant类型的全程变量代表OLE自动化对象,假设该变量名为olemapinfo,那么有:
oleMapinfo:= CreateOleObject('Mapinfo.Application')
一旦OLE自动化对象建立,也就是后台Mapinfo成功启动,你就可以使用该对象的Do方法向Mapinfo发送命令,如:
oleMapinfo.Do('Set Next Document Parent'+ WinHand+'Style 1')
这一命令使Mapinfo窗口成为应用程序的子窗口,WinHand是地图窗口句柄,style 1是没有边框的窗口类型。你还可以使用自动化对象的Eval方法返回MapBasic表达式的值,如下面语句返回当前所打开的表数:
TablesNum:=olemapinfo.eval('NumTables()')
你也可以直接调用Mapinfo菜单或按钮命令对地图窗口进行操作,如地图放大显示:
oleMapinfo.RunMenuCommand(1705)
2.建立客户自动化对象触发CallBack
基于OLE自动化开发的难点在于所谓的CallBack,Mapinfo服务器对客户程序地图窗口的反应叫CallBack,假如你在地图窗口中移动地图目标,Mapinfo能返回信息告诉你地图目标当前的坐标位置,这就是CallBack功能。如果你想定制自己的地图操作工具或菜单命令,你必须依靠CallBack。但是想捕获CallBack信息,你的客户程序必须具备接收CallBack信息的能力,为此需要在客户程序中定义自己的OLE自动化对象,如:
//定义界面
IMyCallback= interface(IDispatch)
['{2F4E1FA1-6BC7-11D4-9632-913682D1E638}']
function WindowContentsChanged(var WindowID: Integer):SCODE;safecall;
function SetStatusText(var StatusText: WideString): SCODE; safecall;
//定义界面实现
TMyCallback= class(TAutoObject, IMyCallback)
function SetStatusText(var StatusText: WideString): SCODE; safecall;
function WindowContentsChanged(var WindowID: Integer): SCODE;safecall;
其中WindowContentsChanged函数用于返回变化窗口的ID号,即当地图窗口变化时(如放大、缩小),让Mapinfo将地图窗口的ID号返回给客户程序;另一个SetStatusText函数返回Mapinfo状态条变化信息。编程人员不能随意定义这些函数,因为只有在三种情况下Mapinfo服务器的CallBack才会被触发:(1)地图窗口发生变化,触发函数为WindowContentsChanged;(2)Mapinfo状态条信息改变,触发函数为SetStatusText;(3)用户选择自定义工具或菜单命令在地图窗口上操作,如用户定制的画线工具,当用户在地图窗口画线时触发Mapinfo的CallBack返回线的坐标位置。
建立客户自动化对象后,调用MapInfo自动化对象的SetCallback方法将客户自己定义的自动化对象告诉Mapinfo,只要程序一运行,客户自动化对象就会自动在注册表中注册,然后就能收到CallBack信息了,如:
My:=MyCallBack.Create
oleMapInfo.SetCallBack(My)
这里打一个比方我想会有助于理解上述机制,客户程序与Mapinfo之间的交互就像舞台指挥与木偶演员的交流,客户程序中的地图窗口或说Mapinfo子窗口只不过是一个牵线木偶,后台的Mapinfo才是真正操纵木偶的演员,所以客户程序必须与后台Mapinfo建立正向、反向的联系机制,才能操纵地图窗口中的图形目标。
三、利用MapX开发
1.掌握使用MapX
MapX是Mapinfo公司最新推出的ActiveX控件产品,目前已经发展到MapX4.5。由于MapX是基于Windows操作系统的标准控件,因而能支持VC、VB、Delphi、PB等标准化编程工具,使用时只需将控件装入开发环境,装入控件后,开发环境ActiveX工具条上会增加一个控件按钮Map,把它拖放到窗体上就可建立一个TMap类型的ActiveX地图对象Map,通过设置或访问该Map对象的属性、调用该Map对象的方法及事件,便能快捷地将地图操作功能溶入到你的应用程序中。
MapX由一系列Object(对象)和Collection(对象集合)组成,Map是最基本的对象,每个Map由Layer(层)、Dataset(数据集)和Annotation(标注)这三个对象及对象集合(Layers、Datasets、Annotations)来定义,其中Layer用于操作地图图层,Dataset用于访问空间对象的属性数据,Annotation用于在地图上添加文本、符号等标注,掌握上述三个主要对象的特征后,再顺藤摸瓜掌握下一级对象的特征,如每个Layer又由Feature(点、线、面、文本图形目标)对象及对象集合(Features)定义,每个Dataset由Field(属性数据域)对象及对象集合(Fields)定义......,这样很快就能把MapX学到手。
2.定义地图坐标系
在MapX开发中需要特别注意地图坐标系问题,MapX地图坐标系分为地图显示坐标系和内部计算坐标系,两者互为独立,在GIS应用开发中根据应用需要设置好这两种坐标系非常重要,因为坐标系一方面影响软件系统的内部坐标处理,另一方面影响地图的外观显示。Map对象的坐标系及投影通过CoordSys对象的Set方法定义:
Set(Type, [Datum], [Units], [OriginLongitude], [OriginLatitude],
[StandardParallelOne], [StandardParallelTwo], [Azimuth], [ScaleFactor],
[FalseEasting], [FalseNorthing], [Range], [Bounds], [AffineTransform])
其中主要参数:Type表示投影类型,Type为1时地图坐标以经纬度表示,后面都为可选参数,其中Datum为地球基准面;Units为坐标单位,如Units为7表示以米为单位;OriginLongitude、OriginLatitude分别为起始经度和纬度;StandardParallelOne、StandardParallelTwo为第一、第二标准纬线,该参数与地图投影相关。
通过设置Map对象的DisplayCoordSys和NumericCoordSys属性返回的CoordSys对象,就可设定地图显示坐标系和内部计算坐标系。举例如下:
procedure TMain.DefineMapParam();
var
MapDatum: Variant;//地球基准面
begin
try
MapDatum:= CreateOleObject('MapX.Datum.4');//建立基准面对象
//定义北京54坐标系基准面
//(Ellipsoid, ShiftX, ShiftY, ShiftZ, RotateX, RotateY, RotateZ, ScaleAdjust, PrimeMeridian)
MapDatum.set(3, 24,-123,-94,-0.02, 0.25, 0.13, 1.1, 0);
//定义北京54坐标系经纬度作为内部计算坐标系
Map1.NumericCoordSys.Set_(1, MapDatum);
//定义北京54坐标系30度标准纬线麦卡托投影作为显示坐标系,单位为米
Map1.DisplayCoordSys.Set_(26,MapDatum,7,0,0,30);
finally
VarClear(MapDatum);
end;
坐标系是GIS系统的基石,正确设置坐标系是系统成败的关键。
3.操纵地图对象
你可以简单地加载一个GeoSet文件,给Layers对象集合赋予具体的内容,随之在Map对象中就能看到地图显示,GeoSet文件类似MapInfo中的工作空间,MapX中带有Geoset文件的编辑器GeosetMangater.exe,用户可在编辑器中组合及设置图层,然后保存生成一个*.gst文件直接调入Map对象,这样可以节省时间。你也可以通过Layers对象的Add或 Remove方法添加或移走地图图层,如:
Map.layers.Add(FileName);//添加图层,FileName为文件全路径名
Map.Layers.Remove(3);//移走地图第三层
Layers对象由一组Layer对象组成,通过Layer对象的Features和Selection对象集合你可以操纵和选择图层上的图形目标,如:
Map.Layers.Item(1).AddFeature(Newobj);//将新建对象Newobj添加到图层一
4.地图数据捆绑
数据捆绑是将不同来源的数据对应到地图层的过程,捆绑结果会产生一个Dataset对象,Dataset对象的集合组成Datasets Collection,它定义了Map对象的数据集属性。你可以通过Datasets将不同来源的数据捆绑到地图上实现图文互动,或创建专题图,如下例ODBC Access数据的捆绑及专题分析:
procedure TMapForm.ODBC1Click(Sender: TObject);
var
param: ODBCQueryInfo;
ds: Dataset;//定义数据集
Datafields: Fields;//定义数据域
begin
param.SqlQuery:='select* from China';//选择Access数据库中的China表
param.DataSource:='MapChina';//ODBC数据源名
param.ConnectString:='ODBC;';//或是user=... Pwd=...,定义ODBC连接
Datafields.Add('GEONAME','GEONAME', miAggregationAuto,miTypeString);//添加数据域GEONAME
Datafields.Add('POPU','POPU', miAggregationAuto,miTypeNumeric);//添加数据域POPU
//将Access数据捆绑到Mapinfo China表
ds:= Map.Datasets.Add(miDataSetODBC, param, unassigned, unassigned, unassigned,'CHINA', Datafields, unassigned);
ds.Themes.Add(miThemeRanged,'POPU','MyTheme');//添加一个范围专题图
end;
5.建立客户定制工具
你还可以定制自己的地图操作工具,下面通过定制一个名为Info的信息按钮工具简述方法步骤:
(1)定义客户工具常量
Const CUSTOM_INFO_TOOL= 1
(2)利用Map对象的CreateCustomTool方法定义客户工具,方法为:
CreateCustomTool(ToolNumber, Type, Cursor, [ShiftCursor], [CtrlCursor], [InfoTips])
其中ToolNumber为工具号,即上面定义的常量;Type为工具类型;Cursor为光标形状,其他参数可选。
//定义Info工具为十字光标点触发工具
Map.CreateCustomTool(CUSTOM_INFO_TOOL, miToolTypePoint, miCrossCursor, miArrowCursor, miArrowCursor, unassigned)
(3)在Map对象事件ToolUsed中编写工具的Handler(操作内容)
procedure TMain.MapToolUsed(Sender: TObject; ToolNum: Smallint; X1, Y1, X2, Y2, Distance: Double;
Shift, Ctrl: WordBool; var EnableDefault: WordBool);
begin
Case ToolNumber of
CUSTOM_INFO_TOOL://信息工具Info
try
……
end;
(4)定义信息按钮的Click事件
procedure TMain.InfoClick(Sender: TObject);
begin
Map.CurrentTool:=CUSTOM_INFO_TOOL;
end
四、小结
基于MapBasic的开发简单但受限制较多,比较适合Mapinfo功能扩展编程。而基于OLE自动化的开发比较繁琐,因为需要来回向后台的Mapinfo发送MapBasic字符串命令,所建立的应用程序运行速度也相对较慢,但这种开发方法能随心所欲制作出美观友好的界面,将地理操作与非地理操作溶为一体,并且能实现几乎100%的Mapinfo功能,这是目前的MapX4.5也不能比拟的。与传统GIS专业性开发环境相比,像MapX这类组件式GIS系统的出现可说是一种质的飞跃,它小巧灵活,开发简捷,价格便宜,以后会越来越大众化。用MapX开发的GIS系统运行速度快,因为它不需要在Mapinfo软件平台上运行。但从目前MapX4.5看,MapX并没能实现所有的Mapinfo功能(据称95%以上),使用过程中发现其生成或编辑地图能力及地理分析能力不足,而且里面Bug也不少,当然随着今后新版的推出,MapX会越来越稳定、完美。
谁能指导一下mapinfo和GIS的区别啊
MapInfo是美国MapInfo公司的桌面地理信息系统软件,是一种数据可视化、信息地图化的桌面解决方案。它依据地图及其应用的概念、采用办公自动化的操作、集成多种数据库数据、融合计算机地图方法、使用地理数据库技术、加入了地理信息系统分析功能,形成了极具实用价值的、可以为各行各业所用的大众化小型软件系统。MapInfo含义是“Mapping+ Information(地图+信息)”即:地图对象+属性数据。
GIS用最简单地来说,GIS是以测绘测量为基础,以数据库作为数据储存和使用的数据源,以计算机编程为平台的全球空间分析即时技术。这是GIS的本质,也是核心。物质世界中的任何事物都被牢牢地打上了时空的烙印。人们的生产和生活中百分之八十以上的信息和地理空间位置有关。地理信息系统( Geographic Information System,简称 GIS)作为获取、存储、分析和管理地理空间数据的重要工具、技术和学科,近年来得到了广泛关注和迅猛发展。由于信息技术的发展,数字时代的来临,理论上来说,GIS可以运用于现阶段任何行业。从技术和应用的角度, GIS是解决空间问题的工具、方法和技术;从学科的角度, GIS是在地理学、地图学、测量学和计算机科学等学科基础上发展起来的一门学科,具有独立的学科体系;从功能上, GIS具有空间数据的获取、存储、显示、编辑、处理、分析、输出和应用等功能;从系统学的角度, GIS具有一定结构和功能,是一个完整的系统。简而言之, GIS是一个基于数据库管理系统( DBMS)的分析和管理空间对象的信息系统,以地理空间数据为操作对象是地理信息系统与其它信息系统的根本区别。 GIS即地理信息系统(Geographic Information System),经过了40年的发展,到今天已经逐渐成为一门相当成熟的技术,并且得到了极广泛的应用。尤其是近些年,GIS更以其强大的地理信息空间分析功能,在GPS及路径优化中发挥着越来越重要的作用。GIS地理信息系统是以地理空间数据库为基础,在计算机软硬件的支持下,运用系统工程和信息科学的理论,科学管理和综合分析具有空间内涵的地理数据,以提供管理、决策等所需信息的技术系统。简单的说,地理信息系统就是综合处理和分析地理空间数据的一种技术系统。
MapInfo功能介绍
MapInfo是一个功能强大且操作简便的桌面地图信息系统,它集成了图形输入与编辑、查询与显示、数据库操作、空间分析以及图形输出等多种功能。系统采用直观的菜单驱动图形用户界面,包括主工具条、绘图工具条、常用工具条、ODBC工具条和MapBasic工具条,用户可以通过菜单或工具条上的选项进入各种对话操作。
系统提供了四个查看窗口:地图窗口、浏览窗口、统计窗口以及帮助设计的布局窗口,用户可以方便地将结果输出至打印机或绘图仪。对于地图的数字化输入与编辑,关键步骤包括设置地图的坐标系、投影、方向和单位,MapInfo支持多种投影方式,用户需要根据地图信息进行相应配置。此外,设置控制点坐标以保证跟踪精度,以及利用绘图和编辑工具对地图元素进行整形和编辑也很重要。
MapInfo的数据管理功能体现在其表结构上,包括数据表和栅格表。数据表支持与多种外部数据源的交互,如dBASE、Excel等。用户可以创建、修改、显示和删除数据记录,以及使用聚合函数进行数据分析。地理编码功能则帮助将非地理信息与地图匹配,查看数据分布。查询功能强大,用户可以从地图或SQL Selection中获取所需信息,生成临时表并进行进一步操作。
扩展资料
MapInfo是美国MapInfo公司的桌面地理信息系统软件,是一种数据可视化、信息地图化的桌面解决方案。它依据地图及其应用的概念、采用办公自动化的操作、集成多种数据库数据、融合计算机地图方法、使用地理数据库技术、加入了地理信息系统分析功能,形成了极具实用价值的、可以为各行各业所用的大众化小型软件系统。MapInfo含义是“Mapping+ Information(地图+信息)”即:地图对象+属性数据。