MapInfo教程

MapInfo教程
MapInfo教程

C#开发GIS应用简明教程

?摘要:这篇是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控件comboBo x1.如下图:

双击设计窗体,编写Form1_Load代码如下:

1.private void Form1_Load(object sender, System.EventArgs e)

2.{

3.ArrayList ToolsList=new ArrayList();

4.ToolsList.Add(MapXLib.ToolConstants.miArrowTool);

5.ToolsList.Add(MapXLib.ToolConstants.miCenterTool);

6.ToolsList.Add(https://www.360docs.net/doc/1717285415.html,abelTool);

7.ToolsList.Add(MapXLib.ToolConstants.miPanTool);

8.ToolsList.Add(MapXLib.ToolConstants.miPolygonSelectTool);

9.ToolsList.Add(MapXLib.ToolConstants.miRadiusSelectTool);

10.ToolsList.Add(MapXLib.ToolConstants.miSymbolTool);

11.ToolsList.Add(MapXLib.ToolConstants.miTextTool);

12.ToolsList.Add(MapXLib.ToolConstants.miZoomInTool);

13.ToolsList.Add(MapXLib.ToolConstants.miZoomOutTool);

https://www.360docs.net/doc/1717285415.html,boBox1.DataSource=ToolsList;

15.}

以上代码通过一个数组ToolsList,将MapXLib的工具加入到comboBox1中.MapX还有一些其它的工具,它们的作用是往地图上加上点,线,多边型和圆.因为这些工具要求有操作图层,一并在介绍图层的时候介绍.关于ArrayList的用法,请参考C#的有关资料.

接着,双击comboBox1,并编写代码如下

1.private void comboBox1_SelectedIndexChanged(object sender, Sy

stem.EventArgs e)

2.{

3.axMap1.CurrentTool=(MapXLib.ToolConstants)comboBox1.SelectedI

tem;

4.}

应注意,在C#中必须要显式地把comboBox1的选择项目SelectedItem(数据类型为obje ct)转换为MapXLib.ToolConstants.因为ToolConstants是MapX自己定义的一个枚举数据类型,C#不能自动完成这种枚举成员变量到object的数据转换.

编译执行程序,从comboBox1中选择不同的工具,在地图上进行操作,你可以了解到MapX 工具集的强大功能.

实际上,MapX提供的工具集就好像Photoshop,AutoCAD的工具栏一样,为你提供了一些控制地图的工具.但是,在开发GIS的时候,这些工具是不能完全满足要求的.所以,还应该学会自定义工具.

下面,通过一个在地图上测距的例子,来介绍一下如何在C#下自定义MapX工具

如前所述建立一个C#的Windows应用程序并将Mapinfo MapX V5 控件加到窗体上.并加入一个Button控件button1.将button1的Text属性改为"测距",再在窗口中放上两个Lab el控件label1,label2,将它们的Text属性设置为""空字符串,如下图:

双击设计窗体,编写Form1_Load代码如下:

1.private void Form1_Load(object sender, System.EventArgs e)

2.{

3.axMap1.CreateCustomTool(100,MapXLib.ToolTypeConstants.miToolT

ypePoly,

4.MapXLib.CursorConstants.miCrossCursor,null,null,null);

5.}

在加载窗口的时候,我们定义了一个工具.它的编号是100(不要和MapX本身的工具编号重复),它的类型是一个多义线,采用十字光标.

关于此函数的用法,建议查看MapX的开发手册和相关资料.

现在我们定义了一个编号为100的工具,可以在程序中使用它了.双击设计窗体中的but ton1,编写它的Click事件处理代码如下:

1.private void button1_Click(object sender, System.EventArgs e)

2.{

3.axMap1.CurrentTool=(MapXLib.ToolConstants)100;

4.}

现在编译运行,单击button1,就可以在地图上使用这个工具了.但是还有一部分重要的代码没有完成:测距!

完成测距功能的代码在C#使用MapX开发GIS中非常具有代表性,也比较有难度.我在首次使用C#+MapX开发GIS的时候,被这个问题困扰了很久.项目经理也来研究,过两天说有结果了,但他给出的例子根本就行不通.当然,会了就不难了.其实,也很简单.

首先,在窗口类中声明两个私有全局变量以保存测出的距离和总距,注意声明代码的位置:

1.public class Form1 : System.Windows.Forms.Form

2.{

3.private AxMapXLib.AxMap axMap1;

4.private System.Windows.Forms.Button button1;

5.private https://www.360docs.net/doc/1717285415.html,bel label1;

6.private https://www.360docs.net/doc/1717285415.html,bel label2;

7.///

8./// 必需的设计器变量。

9.///

10.private https://www.360docs.net/doc/1717285415.html,ponentModel.Container components = null;

11.private double Dis=0,DisSum=0;

12....

13....

现在来编写工具的事件.注意,在MapX画多义线的时候,它触发消息的方式和一般的工具是不同的,首先,它并不是用鼠标一点击就完成了的,还可以继续画下去,所以,不应该在M apX控件的ToolUsed事件中编写,而应该在PolyToolUsed事件中实现测距.代码如下:

1.private void axMap1_PolyToolUsed(object sender, AxMapXLib.CMa

pXEvents_PolyToolUsedEvent e)

2.{

3.MapXLib.PointsClass pts=new MapXLib.PointsClass();

4.switch(e.flags)

5.{

6.case (int)MapXLib.ToolFlagConstants.miToolInProgress:

7. pts=(MapXLib.PointsClass)e.points;

8.Dis=axMap1.Distance(pts._Item(pts.Count-1).X,

9.pts._Item(pts.Count-1).Y,

10.pts._Item(pts.Count).X,

11.pts._Item(pts.Count).Y);

12. DisSum+=Dis;

13.break;

14.default:

15. Dis=0;

16. DisSum=0;

17.break;

18.}

https://www.360docs.net/doc/1717285415.html,bel1.Text="距离:"+Dis.ToString("#.00");

https://www.360docs.net/doc/1717285415.html,bel2.Text="总距"+DisSum.ToString("#.00");

21.}

这段代码虽短.但要注意的地方很多.

首先,定义一个MapXLib.PointsClass类型的变量pts,注意,是PointsClass,不是Poin tClass.前者是点集,后者是点.为什么要增加那么一个变量呢?因为MapX的PolyToolUsed 事件的返回参数e的成员points不是MapXLib.PointsClass类型,而是object.类型.所以需要这么一个变量来转换它,当然,你也可以在程序使用pts的地方直接使用(MapXLib.Poin tsClass)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#中,使用以下方法创建永久图层:

https://www.360docs.net/doc/1717285415.html,yer lyr;

2.lyr=https://www.360docs.net/doc/1717285415.html,yers.CreateLayer("MyLayer","D:\\MapTest\\MyLayer.

Tab",0,32,axMap1.DisplayCoordSys);

当执行这两句程序时,在指定的路径生成了一系列文件.它们是:

MyLayer.Dat:图层的数据文件,它保存的是图层的数据库数据;

MyLayer.ID:图层数据的唯一的,自动生成的编码,用以区分不同的图元;

MyLayer.IND:图层数据的索引文件,以实现图层上图元的快速查找;

MyLaer.MAP:图层上图元的图形数据;

MyLaer.TAB:这是一个文本文件,它的作用是将图层的有关信息保存起来,供GST地图文件或其它程序调用图层.

用记事本打开MyLayer.TAB文件,看到如下内容:

1.!table

2.!version 450

3.!charset WindowsSimpChinese

4.Definition Table

5.Description "MyLayer"

6.Type Native charset "WindowsSimpChinese"

7.Fields 1

8.GEONAME char (32) Index 1 ;

第一行总是"!table",说明这是一个图层表的文件;

第二行指出图层文件的版本号,MapInfo MapX 5.0生成的图层版本号是450;

第三行指出生成图层的操作系统;

接着是对图层的定义段:

首先指出图层的描述,就是我们上面程序代码中的"Mylayer".

接着说明了字符集类型是简体中文;

然后指出表格中只有一个字段,这个字段的名称是"GEONAME",是长度为32的字符类型字段,在表中的列索引为1.

2)添加现有的图层:

添加现有图层的方法和一般的程序语言没有很大的区别,我们在当前图层上添加刚才创建的永久图层,程序代码如下:

https://www.360docs.net/doc/1717285415.html,yerInfo li;

2.li=new https://www.360docs.net/doc/1717285415.html,yerInfoClass();

3.li.Type=https://www.360docs.net/doc/1717285415.html,ayerInfoTypeTab;

4.li.AddParameter("FileSpec","D:\\MapTest\\MyLayer.tab");

5.li.AddParameter("Visible",false);

6.li.AddParameter("AutoCreateDataset",true);

7.li.AddParameter("DatasetName","MyLayer");

https://www.360docs.net/doc/1717285415.html,yers.Add(li,0);

https://www.360docs.net/doc/1717285415.html,yersDlg("","");

10.axMap1.SaveMapAsGeoset("测试","D:\\MapTest\\MyMap.GST");

在程序的最后,我们显示了图层信息对话框,以观察图层是否已经添加到当前的地图中.可以看到,地图中添加了我们创建的图层"MyLayer".放在第0层.

然后,将地图保存在一个MyMap.GST的地图文件中,这个地图的标题是"测试".

3)移除图层:

好,接着我们上面做的工作,将工程的axMap1的GeoSet属性设置为刚刚生成的地图文件: "D:\MapTest\MyMap.GST".现在我们将MyLayer从地图中移除.

添加一个按钮,在按钮的Click事件中编写如下代码:

https://www.360docs.net/doc/1717285415.html,yersDlg("","");

https://www.360docs.net/doc/1717285415.html,yers.Remove(1);

https://www.360docs.net/doc/1717285415.html,yersDlg("","");

我们使用两次显示图层对话框的方式查看程序的效果,应该注意的是在Remove第0层的时候使用的是Remove(1),如果不清楚图层的位置,就要作一个循环,将图层的位置取出来再移除,如下:

1.int lyrind=0;

https://www.360docs.net/doc/1717285415.html,yersDlg("","");

3.for( int i=1;i

4.{

5.if (https://www.360docs.net/doc/1717285415.html,yers[i]._Name.Trim()=="MyLayer")

6.{

7. lyrind=i;

8.break;

9.}

10.}

https://www.360docs.net/doc/1717285415.html,yers.Remove(lyrind);

https://www.360docs.net/doc/1717285415.html,yersDlg("","");

移除操作只在内存中进行,也就是说,程序并不删除任何文件,也没有将图层真正地从地图集合中去掉,当程序重新启动的时候,MyLayer图层仍然在地图中.

3)移除所有图层:

使用https://www.360docs.net/doc/1717285415.html,yers.RemoveAll();就可以移除所有图层,用法和Remove相似.

4)图层定位:

和其它编程语言一样,使用axMap1.Move(1,2)函数就可以将图层的位置改变.

5)创建临时图层

临时图层和永久图层不同,它只存放在内存中,当关闭程序以后该图层将不存在.

在这里我们将使用LayerInfo对象来创建临时图层,这和传统的MAPX程序相近,但是引入了C#编程的一些特色:

https://www.360docs.net/doc/1717285415.html,yerInfoClass li=new https://www.360docs.net/doc/1717285415.html,yerInfoClass();

2.MapXLib.Features ftrs=null;

3.MapXLib.FieldsClass flds=new MapXLib.FieldsClass();

4.MapXLib.Fields Myflds=null;

5.MapXLib.Dataset dts=null;

6.flds.Add("State","State_Name",

7.MapXLib.AggregationFunctionConstants.miAggregationSum,

8.MapXLib.FieldTypeConstants.miTypeString);

9.dts=axMap1.DataSets.Add(MapXLib.DatasetTypeConstants.miDataSe

tLayer,

https://www.360docs.net/doc/1717285415.html,yers._Item(1),"MyLayer",0,0,0,flds,false);

11.Myflds=dts.Fields;

12.ftrs=https://www.360docs.net/doc/1717285415.html,yers._Item("USA").Selection.Clone();

13.li.Type=https://www.360docs.net/doc/1717285415.html,ayerInfoTypeTemp;

14.li.AddParameter("Name","USA Temp Layer");

15.li.AddParameter("Fields",Myflds);

16.li.AddParameter("Features",ftrs);

https://www.360docs.net/doc/1717285415.html,yers.Add(li,1);

https://www.360docs.net/doc/1717285415.html,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 = https://www.360docs.net/doc/1717285415.html,yers("USA").Bounds

一句程序就可以轻松实现.但是要是在C#中这样写的话,百分百会出错.其实,这里有一个小小的技巧,聪明的你一定能看出来:

axMap1.CtlBounds=https://www.360docs.net/doc/1717285415.html,yers._Item("USA").Bounds;

8)在图层上绘制永久图形:

我们在介绍工具的时候,有一些工具没有介绍,这些工具其实是用来在图层上创建永久图形对象的(图元).当在图层上绘制了图形以后,这些图形将以数据记录的形式保存在图层表中,也就是创建了一个图元.如果不想保存图元,可以在临时图层里绘制.

https://www.360docs.net/doc/1717285415.html,yers._Item("USA Temp Layer").Editable=true;

https://www.360docs.net/doc/1717285415.html,yers.InsertionLayer=https://www.360docs.net/doc/1717285415.html,yers._Item("USA Temp La

yer");

3.axMap1.CurrentTool=MapXLib.ToolConstants.miAddLineTool;

上面的程序使用了画线的工具,在地图上拖动鼠标就可以在临时图层上画线了.这些工具使用的前提是必须指定axMap1的插入图层(InsertionLayer).才能在图层表中插入数据.

关于图层的关键技术就介绍到这里,掌握了这些技术以后,在作进一步的研究时,例如动画图层和绘制图层的开发,遇到的困难应该不大.

下面我们介绍C#对MAPX图元的编程技术.

9)在图层上创建图元:

根据MAP Info提供的MapX 5.0开发手册,创建图元有两种方法,用两段代码说明这两种代码在C#的实现方法:

第一种实现方法:直接使用Feature类创建图元

1.MapXLib.Style sty=new MapXLib.StyleClass();

2.MapXLib.Feature ftr=new MapXLib.FeatureClass();

3.ftr.Attach(axMap1.GetOcx());

4.ftr.Type=MapXLib.FeatureTypeConstants.miFeatureTypeText;

5.sty.TextFontColor=255;

6.sty.TextFont.Size=12;

7.ftr.Style=sty;

8.ftr.Caption="New Feature";

9.ftr.Point.Set(axMap1.CenterX,axMap1.CenterY);

https://www.360docs.net/doc/1717285415.html,yers._Item("US Top 20 Cities").Style=sty;

11.ftr=https://www.360docs.net/doc/1717285415.html,yers._Item("US Top 20 Cities").AddFeature(ftr,ne

w MapXLib.RowValuesClass());

12.ftr.Update(ftr,new MapXLib.RowValuesClass());

有几个要注意的地方:

ftr.Attach(axMap1.GetOcx());

如果在VB6下,这句程序应该是这样的:

ftr.Attach Map1

从这里可以看到在C#中因为严格的类型管理所带来的一些变化.如果不进行GetOcx()的转换,即使在https://www.360docs.net/doc/1717285415.html,下也是错误的.

ftr=https://www.360docs.net/doc/1717285415.html,yers._Item("US Top 20 Cities").AddFeature(ftr,new MapXLib.RowV aluesClass());

我们在这个程序中加入了一行空的数据,这也就代表着我们加入的图元不包含任何数据信息.这是为了在介绍图元的时候方便大家掌握,并不意味着这样增加图元就不能将数据保存进去,实际上,通过设置一个新的RowValues变量,是可以将数据信息保存到图元中的.我们将在后面的章节中介绍如何将数据保存在图元中.

ftr.Update(ftr,new MapXLib.RowValuesClass());

这句程序的作用是将创建的图元保存到图层表中,这种保存是永久保存的.除非是在临时图层上增加的图元,否则下次打开地图文件的时候,将看到创建的图元仍然保留在地图上.因此,在对图元操作之前请备份好地图文件,避免不必要的损失.

另外,关于图元的类型(Type)和风格(Style),应该和其所在的图层相对应,比如上面程序中关于Type和Style的设置,都是和"US Top 20 Cities" 图层的类型对应的.有关类型和风格的设置,请查阅相关手册.

第二种实现方法:使用FeatureFactory创建图元

1.MapXLib.Feature ftr=new MapXLib.FeatureClass();

2.MapXLib.Point p=new MapXLib.PointClass();

3.p.Set(axMap1.CenterX,axMap1.CenterY);

4.ftr=https://www.360docs.net/doc/1717285415.html,yers._Item("US Top 20 Cities")

5..AddFeature(axMap1.FeatureFactory.CreateText

6.(p,"New Feature",MapXLib.PositionConstants.miPositionCC,

7.new MapXLib.StyleClass()),

8.new MapXLib.RowValuesClass());

这段代码和上面和第一种实现方法类似,我们在这里不再设置图元的Type和Style.

FeatureFactory类似于设计模式中的Factory模式,从它可以产生各种类型的图元,这个过程相当于设置了图元的Type.

10)查找图元:

查找图元是很简单的,可以用下边的代码实现:

1.MapXLib.FindFeature fRes=null;

2.fRes=https://www.360docs.net/doc/1717285415.html,yers._Item("US Top 20 Cities").Find.Search("New

York","");

3.axMap1.CenterX=fRes.CenterX;

4.axMap1.CenterY=fRes.CenterY;

上面这段代码将找到的图元放置在地图中央.这里要注意的是不能使用

1.MapXLib.FindFeature fRes=new MapXLib.FindFeatureClass();

来创建FindFeature对象,否则将会出错:

"带有 CLSID {436052C3-43E3-11D0-83EB-00AA00BD34FC}的COM对象无效或未注册。"这是MapX 5.0的一个Bug.要避开它,只要在创建对象的时候赋null值就可以了.

下面我们对程序作一些改进,来避免找不到图元的时候出错,并在找到图元以后选择该图元:

1.MapXLib.FindFeature fRes=null;

2.fRes=https://www.360docs.net/doc/1717285415.html,yers._Item("US Top 20 Cities").Find.Search("Ne

w York","");

3.if (fRes.FindRC % 10 ==1)

4.{

5.axMap1.CenterX=fRes.CenterX;

6.axMap1.CenterY=fRes.CenterY;

https://www.360docs.net/doc/1717285415.html,yers._Item("US Top 20 Cities").Selection.Add(fRes);

8.}

11)图元的修改:

图元的增加,修改和删除都是非事务性的,也就是说,所作的修改都永久性地对图层表数据产生影响.这可以使用户对多个图元进行操作后一次更新地图,但是在更新之前并不能看到更新后的效果.我们在使用第一种方法创建图元的时候,在最后更新:

1.ftr.Update(ftr,new MapXLib.RowValuesClass());

但是在FeatureFacory创建图元的时候是不用Update的,因为FeatureFactory的相关方法中已经包含了Update.根据MapX 5.0的开发手册介绍,修改了某个图元并更新时应使用Feature.Update方法,当使用其它图元取代某个图元,应使用Layers.UpdateFeature方法.

12)图元的删除:

和其它编程语言一样,删除图元使用DeleteFeature方法,有关介绍请参看MapX的联机帮助和开发手册.

Mapinfo使用教程

Mapinfo使用教程 一、安装 二、控件的安装 将Addgps1.mbx控件拷贝到C:\Program Files\MapInfo\Professional 6.5 SCP\TOOLS下即可。 三、mapinfo的使用 1、打开mapinfo软件 2、增加工具方法如下:工具工具管理器增加工具 打开“增加工具”出现如下对话框: 点激,出现如下对话框: 选中addgps1.MBX,打开,回到“增加工具”对话框如下(标题随意):

确定,“工具管理器“如下: 确定后,可发现mapinfo菜单快捷栏中多出了。 四、制图 1、打开,出现“Open GPS Date”对话框,查找所要处理的文本文件,打开。

2、生成新图,输入MAPINFO图名(参考林务管理作业编码说明),确定,请及时保存。 3、处理使每一图成闭合曲线,使图尽量圆润。 4、查找无间隙、无断线、无重复、无交叉等,选中全图,后执行“对象/合并”,再选中,执行“对 象/转换成区域”,将区域填充颜色(参考MAPINFO出图标准和管理)。 5、执行“表/更新列”出现如下对话框:选择更新的表、更新的列,点击“辅助”

确定。 6、生成浏览窗口,执行“表/维护/紧缩表” 确定,保存,表会自动关闭。 7、打开刚关闭的表,按鼠标右键,选择“图层控制”,将此表栏位的编辑勾选,点击“标注”

在“标注项”选中“GPS面积”,后选择“表达式”,出现对话框如下,输入表达式其中””为英文的双引号,确定。 在“标注选项”对话框中的“样式”,点击,出现“文本样式”对话框,更改字体属性,字体为12号粗体Arile,颜色与区域颜色相同,如下:

二次开发入门MapBasic--MapInfo教程

MapInfo教程--二次开发入门摘要:MapBasic是Mapinfo自带的二次开发语言,它是一种类似Basic的解释性语言,利用MapBasic编程生成的*.mbx文件能在Mapinfo软件平台上运行,早期的Mapinfo二次开发都是基于MapBasic进行的。MapBasic学起来容易,用起来却束缚多多,无法实现较复杂的自定义功能,用它来建立用户界面也很麻烦,从现在角度看,MapBasic比较适合用于扩展Mapinfo功能。 一、利用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; //定义界面实现

GOOGLE地图转MAPINFO地图教程

Google地图转MapInfo地图教程 一、软件准备 1、Google Earth Pro 2、GlobalMapper10 3、MapInfo Professional 7.0 把上述软件下载安装好。软件版本不同,细节操作可能稍有不同,但大体步骤还是一样的。 二、下载Google地图 1、打开Google Earth Pro软件,登录后,在左上角“飞到”中输入地区名,比如“桂林”。搜索后在主窗口中显示桂林地图。调整右上角方向与缩放工具,可进行相应浏览操作。 可再次在“飞到”中输入更细的地区名,比如“创新大厦”。 搜索后在主窗口中显示创新大厦附近区域的地图。 2、制作地标。 点击“添加”图标,选择“地标”菜单。 地图中出现一个浮动地标。 同时出现一个“Google Earth-New”对话框。可显示当前地标对应的经纬度。 移动浮动地标,对话框中的经纬度会发生相应改变。 选好点,点击“确定”,浮动地标将固定下来。此处命名为“Pt1”。 在“确定”前请务必先记下Pt1的经纬度数值,因为在地图配准时要用到的。 此处单位为“°”。如果不是,可以在“工具->设置”中修改。 此处请务必把单位设定为“°”,否则会严重影响后续步骤的操作。在“Google Earth设置”对话框的“3D显示”选项卡中,找到“显示经纬度选项”,选择“Decimal Degrees”。 下面再做一个地标“Pt2”。尽量不取相同经度或纬度,以提高配准经度。 记下Pt2经纬度数值。 如果不满意,可以右键点击地标,然后“删除”地标重新再做。 至少做两个地标,不设上限,地标越多地图配准越精确。但通常两个就够了。 3、保存Google地图为图像。 选择“文件->保存->保存地图”。 第一次使用Google Earth时“保存图像”选项可能不能用,此时先选择“保存到我的地标库”,下一次再点开“保存”时“保存图像”就会变成可用状态了。 出现“保存图像”对话框。 选择合适的分辨率,“保存”图像。分辨率越大,图像越精细,但载入时间会相应增加。 此处选用默认的屏幕分辨率。 保存图像类型可选。此处选为“JPG”。 关闭Google Earth,进入下一步操作。 三、地图配准。 1、打开GlobalMapper10,打开步骤二保存的map.jpg。弹出“Global Mapper”对话框,点“是”,进入图像匹配校正环节。 2、弹出提示信息,简单描述配准步骤。确定。 3、在“查看全部”窗口出现网格状的地图缩略图。 在此窗口拖拉鼠标,“缩放预览”将会出现相应变化。 在两个图间切换操作,可以得到合适的匹配控制点图像。此处不再赘述。 需要注意的是,控制点投影格式应该是“Geographic (Latitude/Longitude)/WGS84”,如果不是,请修改投影设置。 4、在“缩放浏览”中点中地标Pt1尖端处,会出现一红点表示瞄准该点。

C#开发MapInfo教程1

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控件comboBo x1.如下图: 双击设计窗体,编写Form1_Load代码如下: 1.private void Form1_Load(object sender, System.EventArgs e) 2.{ 3.ArrayList ToolsList=new ArrayList(); 4.ToolsList.Add(MapXLib.ToolConstants.miArrowTool); 5.ToolsList.Add(MapXLib.ToolConstants.miCenterTool); 6.ToolsList.Add(https://www.360docs.net/doc/1717285415.html,abelTool); 7.ToolsList.Add(MapXLib.ToolConstants.miPanTool); 8.ToolsList.Add(MapXLib.ToolConstants.miPolygonSelectTool); 9.ToolsList.Add(MapXLib.ToolConstants.miRadiusSelectTool); 10.ToolsList.Add(MapXLib.ToolConstants.miSymbolTool); 11.ToolsList.Add(MapXLib.ToolConstants.miTextTool); 12.ToolsList.Add(MapXLib.ToolConstants.miZoomInTool); 13.ToolsList.Add(MapXLib.ToolConstants.miZoomOutTool); https://www.360docs.net/doc/1717285415.html,boBox1.DataSource=ToolsList; 15.}

《MaoInfo 7.0 CN 教程》之MapInfo的工作空间

工作空间 1.1 工作空间 工作空间是MapInfo用于保存表、窗口和窗口位置的文件。在使用MapInfo工作过程中会用到许多表和窗口,在这些表和窗口使用前须一一打开,如果我们在退出MapInfo以前将这些打开的表、窗口和窗口的位置保存为工作空间文件,以后使用相同的表和窗口可直接打开保存过的工作空间就可以了,MapInfo将恢复你到保存时的状态,不必逐个打开需要使用的文件,以提高工作效率。工作空间文件记录的是该工作空间所有使用的文件、打开的窗口及位置、MapInfo环境设置等信息。 1.2创建工作空间 ·启动MapInfo Professional; ·在工作空间中打开你所需的表和窗口,设定它们的大小位置(如果你正在使用MapInfo,直接进行下面的步骤); ·选择“文件[F]”>“保存工作空间[K]”命令; ·给出该工作空间的文件名和保存路径; ·单击“保存(S)”。 1.3 打开工作空间 ·选择“文件[F]”>“打开[O]”,出现“打开”对话框;或单击常用工具栏“打开表”图标“”打开; ·从“文件类型(T)”下拉列表中选择工作空间“Workspace(.wor)”; ·用“查找范围(I)”下拉框或通过双击其下的文件夹指定要打开的工作空间所在路径; ·选定要打开的工作空间的名称,如果要选择多个工作空间文件,可以用“Ctrl”或“Shift”配合鼠标来选取,选取的多个文件必须位于同一路径,不同路径的文件可分两次或多次打开; ·单击“打开(O)”,如果打开单个文件,也可以双击该文件。 另外,在MapInfo的快速启动对话框里有“打开工作空间[W]”选项,也可以通过此方式打开已有的工作空间。 1.4 MapInfo.wor文件 MapInfo.wor是退出MapInfo时,MapInfo 自动生成的工作空间文件,存储的是关闭前MapInfo的会话信息。如果有不想覆盖原有文件,可以将其重新命名。如果在退出时不想自动生成此文件,可以通过菜单命令“选项[P]”>“参数设置[P]”>“启动[T]”来设置。如果系统默认的位置没有MapInfo.wor文件,而在MapInfo快速启动选项里又选择了“恢复上次任务[R]”选项,MapInfo将不能恢复上次关闭之前的任务,将按“取消”方式启动。 1.5 Startup.wor文件 Startup.wor文件也是一个工作空间文件,与一般的工作空间文件不同的是:如果该文件位于MapInfo指定的位置,则MapInfo启动时自动加载它们而不出现快速启动对话框。这种启动方式将忽略MapInfo.wor文件存在与否,也就是说,MapInfo的启动方式与其关闭前的状态没有关系。 Startup.wor文件的创建方式与一般的工作空间文件的创建方式相同,所不同的仅仅是文件名必须是“Startup.wor”,保存的位置是固定的。 Startup.wor被自动加载的位置有两个:一是MapInfo的工作目录,也就是Mapinfow.exe 所在的目录;二是操作系统的配置文件Win.ini所在的目录。在第二种情况中,由于操作系

MapInfo教程

C#开发GIS应用简明教程 ?摘要:这篇是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控件comboBo x1.如下图: 双击设计窗体,编写Form1_Load代码如下: 1.private void Form1_Load(object sender, System.EventArgs e) 2.{ 3.ArrayList ToolsList=new ArrayList(); 4.ToolsList.Add(MapXLib.ToolConstants.miArrowTool); 5.ToolsList.Add(MapXLib.ToolConstants.miCenterTool); 6.ToolsList.Add(https://www.360docs.net/doc/1717285415.html,abelTool); 7.ToolsList.Add(MapXLib.ToolConstants.miPanTool); 8.ToolsList.Add(MapXLib.ToolConstants.miPolygonSelectTool); 9.ToolsList.Add(MapXLib.ToolConstants.miRadiusSelectTool); 10.ToolsList.Add(MapXLib.ToolConstants.miSymbolTool); 11.ToolsList.Add(MapXLib.ToolConstants.miTextTool); 12.ToolsList.Add(MapXLib.ToolConstants.miZoomInTool); 13.ToolsList.Add(MapXLib.ToolConstants.miZoomOutTool); https://www.360docs.net/doc/1717285415.html,boBox1.DataSource=ToolsList; 15.}

MapInfo基础教程

MapInfo基础教程 一、 MapInfo简介 MapInfo是由MapInfo公司推出的一个地理信息系统(Geographic Information System 简称GIS)软件,MapInfo Professional 提供了数据库(包括功能强大的 SQL 查询)和地图、图表和统计图可视化的处理功能。是进行数据分析、销售和展示不可多得的商用工具。 拥有 MapInfo Professional,计算机地图绘制功能尽在掌控。您可以将数据显示为点、按照专题显示为影线区域、作为饼图或条形图、作为街区等。您还可以执行地理操作,例如重新分区、合并和拆分对象以及缓冲处理。借助于 MapInfo Professional,还可以查询数据并直接访问远程数据。 例如, MapInfo Professional 可以显示哪个分店最靠近最大的客户。还可以计算客户和商店之间的距离,显示去年花费最多的客户,可以按照销售量通过颜色编码显示商店。所有这一切只需在地图上以可视化的方式显示数据即可。 从其兼容性来看,MapInfo Professional 可兼容 Microsoft Windows 98、Windows 2000、Windows NT 4.0、Windows XP Professional 和 Windows XP Home 以及 Office,以便再在视窗环境实现轻松自如的运用。 我们现在主要运用其数字制图功能。 二、 MapInfo数据格式 MapInfo支持的数据格式是Tab形式的,通常在MapInfo中,创建一个表将会产生以下五个文件: ●.tab:此文件说明表的结构。这是一个说明数据所在文件的格式的小 文本文件。 ●.DAT:这些文件包含制表数据。 ●.MAP:此文件说明图像对象。 ●.ID:此文件是一个链接数据和对象的交叉索引文件。 ●.IND:此文件是一个链接数据和用于 Microsoft Access 表的对象的交 叉索引文件。 三、 MapInfo基础 3.1 工具栏的使用 MapInfo在 4个工具栏中提供了众多工具按钮和命令,借助于此,点击按钮即可实现众多地图绘制创意。

mapinfo中文教程

MapInfo概述 1.1 MapInfo简介 MapInfo是美国MapInfo公司的桌面地理信息系统软件,是一种数据可视化、信息地图化的桌面解决方案。它依据地图及其应用的概念、采用办公自动化的操作、集成多种数据库数据、融合计算机地图方法、使用地理数据库技术、加入了地理信息系统分析功能,形成了极具实用价值的、可以为各行各业所用的大众化小型软件系统。MapInfo 含义是“Mapping + Information(地图+信息)”即:地图对象+属性数据。 1986年MapInfo公司成立并推出了第一个版本—MapInfo for DOS V1.0及其开发工具MapBasic,此后又推出了DOS平台的2.0和3.0版。1995年底MapInfo发布了MapInfo Professional,是一个以Windows 95和Windows NT为平台的桌面地理信息系统。目前该软件的最新版本是MapInfo Professional 7.5及其系列软件。 MapInfo Professional是一套强大的基于Windows平台的地图化解决方案,可以方便地将数据和地理信息的关系直观的展现,其复杂而详细的数据分析能力可帮助用户从地理的角度更好地理解各种信息;可以增强报表和数据表现能力,找出以前无法看到的模式和趋势,创建高质量的地图以便做出高效的决策;凭借其新特性和增强功能,MapInfo Professional 使得桌面地图化和分析功能更快和更容易-并可延伸至整个企业。 MapInfo Professional提供一整套功能强大的工具来进行复杂的商业地图化、数据可视化和GIS功能。通过MapInfo Professional可连接本地及服务器端的数据库,创建地图和图表以揭示数据行列背后的真正含义。也可以定制MapInfo Professional以满足用户的特定需要。 支持Oracle8i完全读/写,通过OCI对Oracle8i及通过ODBC对其它数据源的实时访问。 经历了近20年时间,MapInfo公司成为全球最大的100家软件公司之一。产品行销58个国家和地区,有22种语言的版本,超过30万个正式用户。该产品在1990后进入我国,经过十几年的发展,已经在诸多领域得到广泛应用。 1.2 MapInfo的软件开发思想 MapInfo公司凭借MapInfo系列产品取得了长足的发展,其先进的软件开发技术和软件开发思想,引起了IT业界的注意。微软使用了MapInfo提供的技术在Office办公套件中,已经成功地加入了MapInfo的地图功能,称为数据地图(DataMap);MapInfo与其它大公司的合作;在与Oracle、Sybase等大型数据库公司的合作方面,已经将MapInfo作为企业级大型的数据库的前端工具,实现数据的地理空间查询及可视化显示;INFORMIX、IBM、SUN、HP等都选择MapInfo作为长期合作伙伴。 MapInfo先进的软件开发思想已经为一些专业的CAD、地理信息系统公司所仿效:例如Autodesk公司推出的Autodesk World、Autodesk MapGuide 及AutoCAD Map等。这些先进的软件开发思想包括: ·尽可能向微软公司产品(Windows/Office)的操作特性靠拢。如使用鼠标右键快捷菜单、一致的工具按钮、可码放的工具条、安装与卸装流程、拖放技术、剪贴板技术、Ctrl+、Shift+、Alt+鼠标的使用、支持对象连接与嵌入(OLE)技术、邮件发送等; ·全方位支持从单用户环境、客户机/服务器环境和网络环境(包括Internet和Intranet)等各种体系结构; ·支持ODBC(开放的数据库连接)技术,使不同的数据库系统之间可以进行数据共享和链接,如MapInfo可以直接使用微软Access数据库中的数据。 ·具有类Basic(即VBA、Visual Basic for Applications)的二次开发语言(MapBasic)。

Mapinfo绘制新图层简明教程

Mapinfo绘制新图层简明教程 一、进入初始Mapinfo状态 图层控制 图一 二、使装饰图层变为可编辑状态 点击图层控制快捷键,如图一所示。我们就会看见图层控制窗口,请见图二。

图二 最上面一层称为“装饰图层”,我们在其“是否可编辑”复选框上打勾,使其变为可编辑状态,见图二所示。然后点击“OK ”按钮,即返回mapin fo 主画面,此时“d ra wing ”工具栏内的快捷键已变为有效状态,如图三所示。 图三 三、 自定义绘制的形状格式 见图三所示,点击相应快捷键选择自定义需要的图元形状格式,请自己尝试。 打勾使之可编辑状态 “点”图元格式选择 “面”图元格式选择 “字符”图元格式选择 “线”图元格式选择

四、用各种图元绘制新图层 定义好图元格式后,即可进行新图层的绘制。请在“绘制工具区”选择想用的工具,见图四。 绘制工具 选择区 图四 五、保存所绘制的图层 进行创作完成后,或者有阶段性成果后,请尽快保存自己绘制的图层。注意:刚才我们是把“装饰图层”变为可编辑,所以我们新绘制的网元都存在“装饰图层”上,我们需要保存为永久图层。

图五 如图五,点击“保存装饰对象”菜单,就会出现保存对话框,如图六: 图六 我们选择保存装饰对象到新的图层,点击“Save…”按钮,然后选择保存路径和图层名称即可将刚才添加的装饰对象保存为永久的图层。这里我们假设保存的图层名字为“test”。 六、继续修改编辑刚才保存的图层 上个步骤我们已经有了一个新的图层名为“test”,请再次打开图层控制窗口(操作请参加步骤二),我们就可以看到“test”图层已经在里面了。如图七:

Mapinfo制图教程(布局与打印)

1.布局与打印 宗地界线矢量化号求算完面积之后,我们就可以进行布局与打印了 步骤如下: (1)先打开空白的配准好的地形图,将宗地界叠加到空白的地形图上。见下图 (2)将比例尺设置为1:10000,在设置比例尺前先设置一下纸张和布局单位。 单击“选项->参数设置”菜单,打开参数设置对话框,见下图

单击“系统设置”按钮,打开“系统参数设置”对话框,见下图 为了布局大小精确,我们将纸和布局单位设为毫米,然后单击“确定”关闭对话框。单击“参数设置”对话框的“确定”按钮,关闭对话框。 单击在“主工具栏”的改变设图“”打开改变视图对话框,见下图 设置地图比例1mm=0.01km就把地图的比例尺设为1:10000了。 (3)输入所需要的标注,我们这里是输入标注。 单击“绘图工具栏”上的“”按钮,使其处于按下状态,再在地图窗 口要输入标注的位置单击输入文字,见下图(最好新建一个图层放标注)

可以再文字上双击或选中文本标注后单击“绘图工具栏”的打开文本 样式对话框,见下图来修改文本的颜色、大小、背景等 (4) 单击向下还原窗口按钮缩小地图窗口,见下图 先在这里单击,然后输入文字

缩小后的地图窗口,见下图 设置当改变地图窗口大小的时候保持比例不变,单击“地图”菜单,选择“选项”菜单,打开“地图选项”对话框。 单击向下还原窗口按钮

选中这个 选项 选择“当改变窗口大小”组合框里的“保持当前比例”,如上图,然后单击“确定”按钮,关闭对话框。这时我们改变地图窗口的大小的时候,地图的比例尺不变。 图框制作: 因为我们打印的规格是21X29.7cm,所以我们先在打印区域制作一个210mm*297mm的框,方便我们刚好布局到21X29.7cm那么大。 新建一个图层来保存图框,单击“文件->新建表”打开“新建表”对话框,见下图 在创建新表并且组合框选择“添加到当前地图窗口”,表结构组合框选择“创建新的”然后单击创建,关闭对话框,打开“新标结构”的对话框,见下图

mapinfo配准教程

一、实验内容 1、数字化 二、实验目的 通过实践,了解采集数据的主要过程。 三、实验数据 本实验的数据是以福州市各县市的行政地图为底图,将各县市的区域信息数字化,同时以福州地区截止2008年的人口数据为依据,创建“福州市2008年各县市人口分布”的专题地图。Data/data 2/ Fuzhou.jpg和Data/data 2/stationll.shp; Data/data 2/idle.shp 四、实验过程 1、屏幕跟踪矢量化 (1)准备扫描图像 运行Mapinfo软件,打开数据文件,在文件类型中选择“栅格图像”类型,打开“FUZHOU.jpg”,准备扫描图像。 文件类型选中“栅格图 像” (2)栅格图像配准 点击“配准”,进行配准图像,使该图像具有地理坐标。 进行地图配准 先选择合适的“投影”以及“单位”,然后进行地图的“放大”和“缩小”,以提高选点的精度,在图像上单击以添加控制点(控制点需输入明确的坐标值,如经度、纬度),并且控制点不可少于四个(四个点需不在一条线上),最后点击“确定”,完成地图的配准。

完成配准后,地图在视图框中完成可视化。 (3)新建数字化图层 在完成图像的配准后,我们需要新建一个与原图像相匹配的图层数据,完成图层数字化。选择菜单栏中的“文件”,在其下拉菜单中“新建表” 选中“添加新图层到当前地图窗口”,去掉“打开新地图窗口”,便可创建新的表结构,在“字段信息”中,输入字段“名字”、“类型”,并且设置字段的长度。可根据需要增加和删除字段,也可在此处更改“投影”的类型。这样便可创建新的数据库图层。 选择合适的投影 选择合适的单位 在图像上单击,以添加控制点 放大 缩小 单击确定 去掉打开新地图窗口的钩 在添加到当前地图窗口处打钩 创建新图层

Mapinfo教程

8.5 MapInfo应用实例 下面以中文Windows95/中文MapInfo Professional 4.5为平台,以几个林班构成的一个工区——东南沟为例,说明MapInfo的一些应用。 一、查询功能的应用 系统的查询功能包括从地图到数据库的查询和从数据库到地图的查询。 1.从地图查询数据库 从地图查询数据库由两种方法。 (1)在地图上用信息工具查询数据库。选中信息工具按钮,用“十”字指针选中地图上一小班对象,则信息窗口显示出在小班所在地理位置上所有对象的属性信息,如图8-7所示。图中3个子窗口分别是地图窗口、浏览窗口和信息窗口。地图窗口中显示出东南沟的林班与小班区划图,浏览窗口显示的是小班表的信息,信息窗口中指明当前这个地理位置上有几个对象,分别在几个表中。如果要进一步查看哪张表的信息,则用鼠标点中信息窗口中的那张表即可。这种采用信息工具查询的方式可以直接查看地图窗口中任何地图对象的信息。

(2)用选择工具查询数据库。直接用选择、半径选择、边界选择、 矩形选择工具对地图上的对象进行选择,如图8-7。当用选择工具选中一个小班时,地图窗口中被选中的对象表现为高亮度显示,浏览窗口上小班表中相应记录前的选中标记变为黑色。若要选中多个地图对象时,按住Shift键,逐个点中要选择的对象即可。也可以用其它几个选择工具对图上一定的范围进行选择。选择好对象后,既可以在 小班表浏览窗口查看所有的记录,也可以用浏览窗口工具按钮调出“浏览表”对话框,从对话框中选择要查看的Selection或Query 临时表,临时表中的数据是地图上所有被选中的记录。 2.从数据库查询地图 从数据库查询地图也有两种方式: (1)采用选择记录的方式。即在数据的浏览表中用鼠标点中记录前面的选择标记,则地图中相应地理位置的空间对象表现为高亮度。如果查询要选择多个记录,则需按住Shift键,再逐个点中要选的记录,则地图上被选中的对象将全部显示为高亮度。 (2)采用SQL选择查询方式。这是最灵活、最常用的查询方式。在本例中包含东南沟林班和小班两张表。林班表存放着林班数据,小班表存放小班数据。两表通过“林班”字段发生联系,系统通过该字段分辨林班地图对象与小班地图对象的地理关系。下面是用SQL查询这两表的例子。 例1:若要查询东南沟小班表中面积小于100亩,且树种为柞树或油松的小班。 则在“SQL选择”对话框中作如下填写(见图8-3): 选择列:林班,小班,面积 从表:东南沟小班 条件:面积<100 And树种=“柞树”Or树种=“油松” 结果如图8-8所示。

MapInfo基础教程

MapInfo基础教程 MapInfo基础教程 一、 MapInfo简介 MapInfo是由MapInfo公司推出的一个地理信息系统(Geographic Information System简称GIS)软件,MapInfo Professional 提供了数据库(包括功能强大的SQL 查询)和地图、图表和统计图可视化的处理功能。是进行数据分析、销售和展示不可多得的商用工具。 拥有 MapInfo Professional,计算机地图绘制功能尽在掌控。您可以将数据显示为点、按 照专题显示为影线区域、作为饼图或条形图、作为街区等。您还可以执行地理操作,例如重新分区、合并和拆分对象以及缓冲处理。借助于 MapInfo Professional,还可以查询数 据并直接访问远程数据。 例如, MapInfo Professional 可以显示哪个分店最靠近最大的客户。还可以计算客户和商 店之间的距离,显示去年花费最多的客户,可以按照销售量通过颜色编码显示商店。所 有这一切只需在地图上以可视化的方式显示数据即可。 从其兼容性来看,MapInfo Professional 可兼容 Microsoft Windows 98、Windows 2000、Windows NT 4.0、Windows XP Professional 和 Windows XP Home 以及 Office,以便再在 视窗环境实现轻松自如的运用。 我们现在主要运用其数字制图功能。 二、 MapInfo数据格式 MapInfo支持的数据格式是Tab形式的,通常在MapInfo中,创建一个表将会产生以下 五个文件: .tab:此文件说明表的结构。这是一个说明数据所在文件的格式的小文本文件。 .DAT:这些文件包含制表数据。 .MAP:此文件说明图像对象。 .ID:此文件是一个链接数据和对象的交叉索引文件。 .IND:此文件是一个链接数据和用于 Microsoft Access 表的对象的交叉索 引文件。 三、 MapInfo基础

相关文档
最新文档