从MapX到MapXtreme

总的来说MapXteme比MapX强悍得多,使用上麻烦得多,很多地方变化之大,相当于从头学起。

总结一下,免得久了不看又忘了。


一、图元

MapXtreme中叫几何,图元对应表中的一行,用CreateFeatureGeometryColumn创建几何字段,CreateStyleColumn创建样式字段,早期版本字段名长度有限制

图元的选中情况MapInfo.Engine.Session.Current.Selections.DefaultSelection

点:Point,MultiPoint

线:MultiCurve

多边形:Polygon,MutiPolygon


二、样式

MapXtreme的样式老复杂了,例如区域样式是由边线加填充样式组成,组合方式很多,灵活倒是灵活,2005 v6.7及以上版本还可以抗锯齿、半透明

点样式:简单向量点SimpleVectorPointStyle、字体点FontPointStyle、图片BitmapPointStyle,

线样式:SimpleLineStyle

面样式:AreaStyle


二、图层

MapX下图层是图元的集合,即Layer下是Features,可以给图层添加多个字段,不过字段一多效率极低

MapXtreme中将图层变成了二维表,而且需要用MapInfo.Engine.Session.Current.Catalog来遍历(添加或获取),图层有两个名字一是图层名,二是别名(表名),别名是唯一区别图层的。

1、图层的显示

在MapXtreme中,用IsVisible查看图层显示状态。用Layer.Enable来设置显示状态。

2、图层的添加

代码如下(C#): 

            

Catalog _catalog = MapInfo.Engine.Session.Current.Catalog;
MapInfo.Data.Table _tempTable = null;
Map _map = MapControl1.Map ;
//默认为内存表,永久表应使用参数MapInfo.Data.TableType.Native
TableInfo ti = TableInfoFactory.CreateTemp("临时");            
//创建geometry列
ti.Columns.Add(MapInfo.Data.ColumnFactory.CreateFeatureGeometryColumn("Obj", CoordSys));
//创建MI_Style列
ti.Columns.Add(MapInfo.Data.ColumnFactory.CreateStyleColumn());
//向表信息中添加自定义字段
ti.Columns.Add(MapInfo.Data.ColumnFactory.CreateIntColumn("Index"));
ti.Columns.Add(MapInfo.Data.ColumnFactory.CreateStringColumn("Name", 50));
//永久表需设置文件的全路径,Temporary = false
ti.TablePath = tlbFilePath;
ti.Temporary = false;
_tempTable = _catalog.CreateTable(ti);
_map.Layers.Insert(0, new FeatureLayer(_tempTable));


搜索图元

在MapX下搜索图元用layer.searchXXX方法来实现

在MapXtreme下,用Find对象进行搜索,先通过图层表别名取到表,再生成查询条件,最后通常Catalog.SearchXXX来实现

            var sif = MapInfo.Data.SearchInfoFactory.SearchWhere(sqlWhere);//SQL的条件,例如:a = 1 or b = '123'
            var ftrs = MapInfo.Engine.Session.Current.Catalog.Search(table, sif);

若没有条件字段(唯一的信息存到图元的标签里了),就只能遍历表,再取图元几何的Caption了

((MapInfo.Geometry.LegacyText)feature.Geometry).Caption 

四、标注

MapX下用Layer.Autolabel

MapXtreme就麻烦了,标注必须跟图层的表关联,做为标注的数据源,然后设上标注的表达式

Table table = MapInfo.Engine.Session.Current.Catalog.GetTable("图层表别名");
LabelLayer layer = new LabelLayer();
map.Layers.Add(layer);
LabelSource source = new LabelSource(table);
source.DefaultLabelProperties.Caption = "KEY_NAME";//标注表达式
layer.Sources.Append(source);

五、图层分组

MapX下好像没有这个功能,MapXtreme下反正是有,还可以覆盖样式图层,挺牛,不过遍历时要递归


六、专题图

MapXtreme在专题图方面比MapX强大了很多,而且很灵活,图层就是表,多个表不就是一个数据库了么,所以,什么关联查询啊都很容易实现,有木有。

还没学习完,以后再补上。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值