MapInfo的相关理解

转载 2007年09月18日 09:41:00

对Table、Feature等的理解

一、Table
2004中,Table还是表,可以来自原始的mapinfo表,也可以来自数据库的二维表、文本等。Table的等价概念是feature集合,如下代码:
(_tempTable as IFeatureCollection).Clear();
当然,可以通过枚举器,来逐个访问table的行,如下:
Selection sl =MapInfo.Engine.Session.Current.Selections.DefaultSelection;
IResultSetFeatureCollection fc=sl[0];
IFeatureEnumerator fn=fc.GetFeatureEnumerator(); //IFeatureCollection也有GetFeatureEnumerator
ListBox1.Items.Clear();
while(fn.MoveNext())
if(fn.Current.Geometry.GetType().ToString()=="MapInfo.Geometry.LegacyText")
ListBox1.Items.Add(((MapInfo.Geometry.LegacyText)fn.Current.Geometry).Caption);
当然,用
foreach(Feature feature in tb)
也是毫无问题的,因而,table和结果集是等价的。
二、Feature
Feature等价于表中的行。只与行有关,而与具体的图元的类型无关。换言之,Feature只是指图元对应的表行,而与图元的属性无关。
用Feature.Table可以引用到所属的表。
用Table.TableInfo可以引用到表的结构信息。
Feature具有的默认列,一般都包括obj,Mi_key,Mi_Style。obj我个人认为就是Feature对应的几何对象。用Feature.Geometry属性可以引用。
Feature.Geometry的类型是FeatureGeometry,它是各种具体图元(点线面文字...)的父类,Feature.Geometry属性所对应的,其实是具体的类。(我向这个属性赋点对象,发现没错)。
对Feature的使用,可以通过CataLog的SearchForFeature来查找,如下
MapInfo.Engine.Session.Current.Catalog.SearchForFeature("Layer1",MapInfo.Data.SearchInfoFactory.SearchWhere("MI_Key='"+strKey+"'") )
由于ID其实并不唯一,所以,较好的查找对象是MI_Key。同时,Catalog还有其他的查找函数,如SearchNearest等。
加入Feature时,往往需要指定这些基本的信息,有多种加入方法

——————————————————————————————————————————————

图层操作

在MapXtreme中,要完成类似功能,发生了一点变化,如下:
  1、图层的显示
  在MapXtreme中,图层的显示控制发生了奇怪的变化,有一个IsVisible属性,但它是只读的,不能通过它来改变图层的显示。要控制图层的显示与隐藏,可以通过设置Layer.Enable来控制。
  2、图层的动态添加
  代码如下:
Catalog _catalog=MapInfo.Engine.Session.Current.Catalog;
MapInfo.Data.Table _tempTable=null;
Map _map=MapControl1.Map ;

TableInfo ti = TableInfoFactory.CreateTemp("临时");
_tempTable = _catalog.CreateTable(ti);
_map.Layers.Insert(0, new FeatureLayer(_tempTable));

  可以看出:加图层实际就是加表;Catalog对象统管表的加载以及列举;
  查帮助还可以了解:表信息其实还可以包括表的类型和坐标系。类型是指原生表,文本,access ...
  上面的ti也可以这样取得,但是,上面的表默认是MeMTab,应该是内存中的吧。

CoordSys cs=_map.GetDisplayCoordSys();
TableInfo ti = TableInfoFactory.CreateTemp("临时",MapInfo.Data.TableType.Native,cs);

  以上只能算是学习心得,肯定错误百出,但总比什么都没有强,至少能够提供一个思路。至于表如何保存,Mapx中的动画层和标签层在MapxTreme中如何对应,因为暂时不急用,先放着。

——————————————————————————————————————————

标注AutoLabel

//James.Liu的代码
Table table = Session.Current.Catalog.OpenTable("usa.tab");
Map map = Session.Current.MapFactory.CreateEmptyMap(new Size(300, 300));
LabelLayer layer = new LabelLayer();
map.Layers.Add(layer);
LabelSource source = new LabelSource(table);
source.DefaultLabelProperties.Caption = "State_Name";
layer.Sources.Append(source);

//我的
LabelLayer layer = new LabelLayer();
MapControl1.Map.Layers.Add(layer);
LabelSource source = new LabelSource(MapInfo.Engine.Session.Current.Catalog.GetTable("地名"));
source.DefaultLabelProperties.Caption = "f_name"; //标注用到的那个字段名称
layer.Sources.Append(source); 

——————————————————————————————————————————

工具选择

 在Mapx中为控件选择工具比较迅速,也很直观,如下:
Map1.CurrentTool = miZoomInTool
  miZoomInTool是个枚举量,指定给CurrentTool属性即可,而且象在VB中,直接在等号之后就把备选项就列出来了,非常容易。
  在MapXtreme中,这个不起眼的问题却搞得有点麻烦,主要是架构有点变化,设置位置很容易找
MapControl1.MapTools.CurrentTool=
  可是,要赋的值却比较麻烦,因为C#中并没有给出智能提示,而且在帮助和对象浏览器中也没有找到什么枚举值。帮助中说要赋String类型,试着
MapControl1.MapTools.CurrentTool="ZoomInMapTool";
  但是出错。于是查找帮助,了解MapXtreme中的架构,大致如此:MapTools属于MapControl控件的工具集合,其中已经包含了10个工具,debug中挨个求出如下:
0:ZoomInMapTool
1:ZoomOutMapTool
2:PanMapTool
3:CenterMapTool
4:PointSelectionMapTool
5:RadiusSelectionMapTool
6:RectangleSelectionMapTool
7:PolygonSelectionMapTool
8:DistanceMapTool
9:InfoMapTool
  但是要选择工具,却不能用Index,也不能用某项的名字字符串,必须用toolname属性,而且必须这样
MapControl1.MapTools.CurrentTool =ZoomInMapTool.Toolname;
  因为Toolname是一个静态属性,所以必须用类名来引用,其他别的方式都不行。
  看来,以后要用哪个工具,得先查到工具名称,然后才能指定了
 

利用Mapinfo工具转地图数据

一、Shapfile文件与Mapinfo文件之间的转换 1、打开Mapinfo工具 2、点击“工具">>Universal Translator(通用转换器)>>Universal Translat...
  • a78460750
  • a78460750
  • 2013年09月27日 22:56
  • 2076

MapInfo数据导入到ArcGIS

近期接触到MapInfo格式的边界数据,但是我们平常使用的是Shape格式,所以需要在ArcGIS下把MapInfo格式的数据导入到ArcGIS。 MapInfo数据格式如下:xian.MID,xi...
  • liuguobo
  • liuguobo
  • 2013年12月12日 12:26
  • 8747

Mapinfo Sql语句查询方法

Mapinfo   Sql语句查询方法                                                                                ...
  • shixiaoguo90
  • shixiaoguo90
  • 2014年06月11日 10:58
  • 2000

mapInfo文件格式详解

mapInfo文件格式详解     在Mapinfo中每张地图被称为一个图层(或被称为表)。 每个Mapinfo表由两部分最重要的内容构成:图形(称为空间对象)和数据(称为属性)。 Mapi...
  • zhihu008
  • zhihu008
  • 2012年07月19日 11:13
  • 5046

转载Mapinfo地理编码

第九课  地理编码一、概述:本课,我们将打开一个DBF文件,将它与一个街道地图地理编码,井用邮政编码边界精确地理编码过程。我们将对该文件进行自动和交互式地理编码,并按邮政编码中心将另一个文件地理编码。...
  • youngphon
  • youngphon
  • 2011年02月24日 12:13
  • 701

GPS软件应用 用VC开发Mapinfo程序

开发环境:VC + MapInfo Professional 代码: 所用软件:Mapinfo,MapBasic,VC++6.0 先装Mapinfo,后装MapBasic.不装mapinfo...
  • zhihu008
  • zhihu008
  • 2012年07月25日 00:40
  • 5782

MapInfo数据交换文件格式浅探

摘  要:MAPINFO这一大型桌面地理信息系统软件提供了tab格式和MIF(MID)两种数据格式,其中tab是其内部数据存储格式,所有基于该软件的应用系统都以此格式为依托。MIF(MID)是MAPI...
  • zhihu008
  • zhihu008
  • 2012年07月19日 11:10
  • 6316

将MapInfo数据转换成OpenStreetMap地图的一种尝试(未完全解决问题)

国内的OpenStreetMap地图数据那是相当的不详尽,这给研究开发带来了不少的限制。MapInfo地图数据则较为详尽,而OpenStreetMap地图容易获取道路层数据。于是乎应该有不少人会想把M...
  • bobantangzlt
  • bobantangzlt
  • 2014年03月07日 14:27
  • 3387

MapInfo数据交换文件格式浅探

MapInfo数据交换文件格式浅探 摘  要:MAPINFO这一大型桌面地理信息系统软件提供了tab格式和MIF(MID)两种数据格式,其中tab是其内部数据存储格式,所有基于该软件的应用系统都...
  • keykeywu
  • keykeywu
  • 2013年07月31日 20:20
  • 764

MapInfo简介

 1.1 MapInfo简介MapInfo是美国MapInfo公司的桌面地理信息系统软件,是一种数据可视化、信息地图化的桌面解决方案。它依据地图及其应用的概念、采用办公自动化的操作、集成多种数据库数据...
  • chenyi7900466
  • chenyi7900466
  • 2011年04月04日 19:00
  • 184
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MapInfo的相关理解
举报原因:
原因补充:

(最多只允许输入30个字)