MapXtreme实用技巧与源码10例
1 设置图层可选状态
/** <summary>
/// 改变层的可选择状态
/// </summary>
/// <param name="selectableStatus"></param>
/// <returns></returns>
public bool LayerSelectableStatusUpdate(string tableAlias,bool selectableStatus)
{
if(mapControl1.Map.Layers[tableAlias]==null)
return false;

MapInfo.Mapping.LayerHelper.SetSelectable(mapControl1.Map.Layers[tableAlias],selectableStatu

s);
return true;
}

2 设置层的可用状态

/** <summary>
/// 改变层的可用状态为status
/// </summary>
/// <param name="layerName"></param>
/// <param name="status"></param>
public void LayerEnableStatusUpdate(string layerName,bool status)
{
if(mapControl1.Map.Layers[layerName]!=null && mapControl1.Map.Layers[layerName].Enabled!

=status)
{
mapControl1.Map.Layers[layerName].Enabled=status;
}
}
3 层居中,看全图

/** <summary>
/// 使指定层全部呈现在地图的可见范围中
/// </summary>
/// <param name="tableAlias">层别名</param>
public void LayerCenter(string layerName)
{
MapInfo.Data.Table[] tables=new MapInfo.Data.Table[1];
tables[0] = MapInfo.Engine.Session.Current.Catalog.GetTable(layerName);
if(tables[0]==null)
return;
if(mapControl1.Map.Layers[layerName]==null)
return;

if(mapControl1.Map.Layers[layerName].Enabled == false)
mapControl1.Map.Layers[layerName].Enabled = true;

MapInfo.Mapping.IMapLayerFilter iMapLayerFilter =

MapInfo.Mapping.MapLayerFilterFactory.FilterByTable(tables);
MapInfo.Mapping.MapLayerEnumerator mapLayerEnumerator =

mapControl1.Map.Layers.GetMapLayerEnumerator(iMapLayerFilter);
mapControl1.Map.SetView(mapLayerEnumerator);
OnFeatureUnclick();
}

4 放大缩小地图

/** <summary>
/// 放大地图
/// </summary>
/// <param name="times">放大倍数,有效值1-10</param>
public void ZoomIn(uint times)
{
if(times<1 || times>10) return;
MapInfo.Geometry.Distance previousZoom=this.mapControl1.Map.Zoom;
mapControl1.Map.Zoom=new MapInfo.Geometry.Distance(previousZoom.Value/

(2*times),previousZoom.Unit);
}
/** <summary>
/// 缩小地图
/// </summary>
/// <param name="times">缩小倍数,有效值1-10</param>
public void ZoomOut(uint times)
{
if(times<1 || times>10) return;
MapInfo.Geometry.Distance previousZoom=this.mapControl1.Map.Zoom;
mapControl1.Map.Zoom=new MapInfo.Geometry.Distance(previousZoom.Value*

(2*times),previousZoom.Unit);
}

5 移动层的顺序
mapControl1.Map.Layers.Move(index1,index2);

6 图元/图层透明

/** <summary>
/// 设置层的透明与否
/// </summary>
/// <param name="layerName">层名</param>
/// <param name="opaqueType">不透明类型 ALL 全部不透明 BORDER 只有边界不透明(内部透明)

NONE 全部透明</param>
/// <param name="borderColor">如果是边界不透明,此处设置边界颜色</param>
public void LayerTransparent(string layerName,OpaqueType opaqueType,System.Drawing.Color

borderColor)
{

MapInfo.Styles.CompositeStyle compositeStyle = GetOpaqueStyle(opaqueType,borderColor);

//创建连接和命令来更新table中的数据
MapInfo.Data.MIConnection connection=new MapInfo.Data.MIConnection();
connection.Open();
MapInfo.Data.MICommand command=connection.CreateCommand();
command.CommandText = "update " + layerName + " set obj=obj,MI_Style=@style";
command.Parameters.Add("@style",compositeStyle);
command.Prepare();
command.ExecuteNonQuery();

//关闭连接
command.Cancel();
command.Dispose();
connection.Close();
connection.Dispose();
}
/** <summary>
/// 创建style
/// </summary>
/// <param name="opaqueType">不透明类型:ALL全部不透明(白色实心);BORDER边界不透明(填充部

分透明);NONE全透明</param>
/// <param name="borderColor">如果opaqueType=BORDER,此处设定边界颜色</param>
/// <returns>组合style</returns>
private MapInfo.Styles.CompositeStyle GetOpaqueStyle(OpaqueType

opaqueType,System.Drawing.Color borderColor)
{
MapInfo.Styles.SimpleInterior simpleInterior;
if(opaqueType==OpaqueType.ALL)
simpleInterior= new MapInfo.Styles.SimpleInterior(); //缺省构造函数是白色实心
else
simpleInterior= new MapInfo.Styles.SimpleInterior(1); //0是线透明,1是面透明

MapInfo.Styles.LineWidth lineWidth = new

MapInfo.Styles.LineWidth(1,MapInfo.Styles.LineWidthUnit.Point);

MapInfo.Styles.SimpleLineStyle simpleLineStyle;
if(opaqueType==OpaqueType.ALL)
simpleLineStyle = new MapInfo.Styles.SimpleLineStyle(lineWidth); 
else if(opaqueType==OpaqueType.BORDER)
simpleLineStyle = new MapInfo.Styles.SimpleLineStyle(lineWidth,2,borderColor); //2表示填充

透明,即能够显示轮廓
else
simpleLineStyle = new MapInfo.Styles.SimpleLineStyle(lineWidth,0); //0表示全部透明,即连轮

廓都看不到

MapInfo.Styles.AreaStyle areaStyle = new

MapInfo.Styles.AreaStyle(simpleLineStyle,simpleInterior);

MapInfo.Styles.CompositeStyle compositeStyle = new

MapInfo.Styles.CompositeStyle(areaStyle,null,null,null);

return compositeStyle;
}

7 选择全部图元

MapInfo.Engine.Session.Current.Catalog.Search(
table,
MapInfo.Data.SearchInfoFactory.SearchAll(),
MapInfo.Engine.Session.Current.Selections.DefaultSelection,
MapInfo.Data.ResultSetCombineMode.Replace);

8 设置坐标系
缺省情况下,MapXtreme使用的CoordSys是经纬度投影(LongLat)和WGS84基准面。我想修改投影类型为

CoordSysType.TransverseMercator ,基准面为DatumID.Pulkovo1942
   MapInfo.Geometry.CoordSysFactory

coordSysFactory=MapInfo.Engine.Session.Current.CoordSysFactory;
   mapControl1.Map.SetDisplayCoordSys(coordSysFactory.CreateCoordSys("mapinfo:coordsys

8,1001,7,117,0,1,20500000,0"));
   
   coordSysFactory.CreateCoordSys("mapinfo:coordsys 8,1001,7,117,0,1,20500000,0") 默认的原点

是(B=0,L=117),如果要把原点设在(23,117)应该怎么写这个字符串呢?
   coordSysFactory.CreateCoordSys("mapinfo:coordsys 8,1001,7,114,23,1,20500000,25000000")
   
9 保存新画的层为tab文件
下面的源码是新建一个永久表,然后在表中添加feature,然后保存为硬盘上的tab文件。

private MapInfo.Data.Table CreateNewMapDataTable(string tableName)
        {
            //以下代码是建立永久表
           MapInfo.Data.TableInfoNative

tableInfoNative=newMapInfo.Data.TableInfoNative(tableName);
            tableInfoNative.TablePath=@"D:\DATA\"+tableName+".TAB";
           tableInfoNative.Columns.Add(MapInfo.Data.ColumnFactory.CreateIntColumn("ID"));
           tableInfoNative.Columns.Add(MapInfo.Data.ColumnFactory.CreateStyleColumn());
           MapInfo.Geometry.CoordSys coordSys =mapControl1.Map.GetDisplayCoordSys();

tableInfoNative.Columns.Add(MapInfo.Data.ColumnFactory.CreateFeatureGeometryColumn(coordSys)

);
           MapInfo.Data.Table table

=MapInfo.Engine.Session.Current.Catalog.CreateTable(tableInfoNative);

//以下代码是建立临时表
//           MapInfo.Data.TableInfo tableInfo

=MapInfo.Data.TableInfoFactory.CreateTemp(tableName);           
//           tableInfo.Columns.Add(MapInfo.Data.ColumnFactory.CreateIntColumn("ID"));
//           MapInfo.Data.Table table

=MapInfo.Engine.Session.Current.Catalog.CreateTable(tableInfo);

MapInfo.Mapping.FeatureLayer featureLayer =

newMapInfo.Mapping.FeatureLayer(table);
            this.mapControl1.Map.Layers.Add(featureLayer);
            return table;
        }

private void AddFeaturesAndSave()
        {
           MapInfo.Styles.SimpleLineStyle simpleLineStyle =

newMapInfo.Styles.SimpleLineStyle(new

MapInfo.Styles.LineWidth(1,MapInfo.Styles.LineWidthUnit.Point));
           MapInfo.Styles.CompositeStyle compositeStyle =

newMapInfo.Styles.CompositeStyle(null,simpleLineStyle, null, null);
           MapInfo.Geometry.CoordSys coordSys =mapControl1.Map.GetDisplayCoordSys();

MapInfo.Data.Table table = CreateNewMapDataTable("NewTable");
            MapInfo.Data.TableInfo tableInfo = table.TableInfo;
            while(……)
            {
               MapInfo.Data.Feature feature = newMapInfo.Data.Feature(tableInfo.Columns);

feature.Geometry = ……
                feature.Style = ……
                feature["ID"] = ……
                table.InsertFeature(feature);
            }
            tableInfo.WriteTabFile(); //保存为.tab文件

mapControl1.Refresh();
        }

10 计算缩放比例

/** <summary>
/// 重画控件时计算缩放比例
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void mapControl1_Paint(object sender,PaintEventArgs e)
{
MapInfo.Geometry.Distance zoomDistance=this.mapControl1.Map.Zoom;
double zoom=Convert.ToDouble(Convert.ToInt32(zoomDistance.Value*16.09))/10;
this.statusBar1.Text="缩放比例:"+zoom.ToString()+" 千米";
}

转载于:https://www.cnblogs.com/bjxly/archive/2012/01/04/2312602.html

MapXtreme实用技巧相关推荐

  1. 深度学习11个实用技巧

    深度学习11个实用技巧 深度学习工程师George Seif发表了一篇博文,总结了7个深度学习的技巧,本文增加了几个技巧,总结了11个深度学习的技巧,主要从提高深度学习模型的准确性和速度两个角度来分析 ...

  2. 【老鸟分享】Linux命令行终端提示符多种实用技巧!

    1.Linux命令行提示符简介 众所周知,Linux命令行是系统管理员管理Linux的重要手段,我们管理Linux,首先要面对的就是Linux命令行提示符. Linux命令行结尾的提示符有" ...

  3. 经典 | 深度学习的7大实用技巧

    编译 | AI科技大本营 参与 | 林椿眄 编辑 | 谷 磊 对于许多具有挑战性的现实问题,深度学习已经成为最有效的解决方法. 例如,对于目标检测,语音识别和语言翻译等问题,深度学习能够表现出最佳的性 ...

  4. 深度学习七个实用技巧

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 深度学习已经成为解决许多具有挑战性的现实世界问题的方法.对目标检测 ...

  5. Python大神用的贼溜,9个实用技巧分享给你

    来源:数据分析1480 本文约3000字,建议阅读6分钟 本文为你介绍一些关于python的实用技巧. 本文会试着介绍一些其它文章没有提到的小技巧,这些小技巧也是我平时会用到的的.让我们一探究竟吧! ...

  6. 5 个针对有经验用户的 Vim 实用技巧

    Vim 编辑器提供了很多的特性,要想全部掌握它们很困难.然而,花费更多的时间在命令行编辑器上总是有帮助的.毫无疑问,和 Vim 用户们进行交流能够让你更快地学习新颖有创造性的东西. 注: 本文中用到的 ...

  7. ES6的几个实用技巧,你了解吗?

    本文给大家分享了es6的几个实用技巧,非常不错,具有参考借鉴价值,感兴趣的朋友一起学习吧 Hack #1 交换元素 利用 数组解构来实现值的互换 let a = 'world', b = 'hello ...

  8. 在此处打开命令窗口_这样操作方便多了!简单DOS命令实用技巧详解

    分享简单DOS命令实用技巧,让我们的工作.生活更加方便快捷.小编致力于分享分享智能数码.弱电组网.电脑软硬件资讯及实用技巧. 先跟着小编一起来了解一下DOS命令是一个什么样子的存在?技术大牛,请忽略, ...

  9. Windows2003实用技巧

    Windows2003实用技巧七则 一.跳过磁盘检修等待时间 一旦计算机因意外原因,例如突然停电或者死机的话,那么计算机下次重新启动的话,系统就会花10秒钟左右的时间,来运行磁盘扫描程序,检查磁盘是否 ...

  10. jexcel可以合并单元格么_含金量超高的3个文本、字符合并实用技巧解读!

    当各位亲看到此篇文章时,说明已是2019年1月1日呢,感谢各位亲对小编的支持和厚爱,在这里祝福各位亲元旦快乐,"19"快乐,事业有成--同时,小编会继续努力为各位亲开发更多的实用技 ...

最新文章

  1. 基于silverlight4(beta)的摄像头应用(Beta2)发布
  2. UA MATH567 高维统计 专题0 为什么需要高维统计理论?——以线性判别分析为例
  3. (王道408考研数据结构)第三章栈和队列-第一节:栈基本概念、顺序栈和链栈基本操作
  4. 关于AI Architecture未来的一些思考
  5. Bootstrap3 地址元素样式
  6. windbg linux内核调试,使用Windbg调试window内核
  7. 从零开始的网站搭建,服务器与域名管理
  8. Eclipse开发环境下,部署和配置svn的整个过程
  9. autocad java api,autocad接口api
  10. oracle minus intersect,oracle之集合操作函数---minus、union、intersect
  11. AI 成野生动物保护神:没有图像识别算法,考拉可能灭绝!
  12. 【Kevin Learn 小程序】--> navigator
  13. LVM 的自定义报告(pvs vgs lvs各参数详解)
  14. 2020年华中师范大学计算机考研经验分享
  15. 2020微信设置2小时到账或24小时到账
  16. H2数据库中的数据类型
  17. 网易云易盾推出面向微信小程序的大数据反作弊产品
  18. [nonebot2]QQ机器人签到插件
  19. Python爬虫问题汇总(持续更新)
  20. python 队列实现_python中实现队列的queue模块

热门文章

  1. 【华为认证】HCIA-DATACOM史上最全精选题库(附答案解析)
  2. 如何复现论文中的算法
  3. github-markdown-css使用说明
  4. Oracle数据库常用sql语句
  5. Android刷机Windows10,蓝魔i9s Win10+Android双系统的刷机教程及固件下载
  6. 怎么下载计算机考试准考证
  7. 华为中兴OLT-ONU上线单播组播配置常用命令及TestCenter测试组播和PPPoE
  8. android viewflipper图片轮播,ViewFlipper探索与使用——顺便实现Android图片轮播
  9. java反编译 mac_java反编译工具Mac版-jd-gui for Mac下载 V1.6.6-PC6苹果网
  10. 批量txt数据转换为excel