mapinfo开发 >> MapXtreme开发基础教程二,MapXtreme几个基本的功能

最后编辑时间:2021年07月23日 18:09:44

【内容简介】MapXtreme基础教程二,MapXtreme开发几个基本的功能如下:MapXtreme设置缩放比例,MapXtreme设置坐标系, MapXtreme选择全部图元,MapXtreme设置图层透明与否,MapXtreme 保存新编辑的图层为tab文件

1. MapXtreme设置缩放比例
 
/// <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()+" 千米";
MapXtreme设置缩放比例
2. MapXtreme设置坐标系
缺省情况下,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")
 
3. MapXtreme选择全部图元
 MapInfo.Engine.Session.Current.Catalog.Search( table, MapInfo.Data.SearchInfoFactory.SearchAll(), MapInfo.Engine.Session.Current.Selections.DefaultSelection, MapInfo.Data.ResultSetCombineMode.Replace);
 
4. MapXtreme设置图层透明与否
 /// <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);
 
 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;
}
 
5.MapXtreme 保存新编辑的图层为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();
        }

分享到: 豆瓣 新浪微博 百度贴吧 QQ空间 QQ好友
复制链接分享给好友或者自己收藏!这里会及时更新中。。。

相关推荐:
 
QQ
QQ:278325424
咨询热线
18191066384