MapXtreme技巧总结
 

while(reader.Read())        

              {            for(int i=1;i<ti.Columns.Count-1;i++)        

                     {              this.ListBox1.Items.Add(reader[i].ToString());    

                            }                         

       this.ListBox1.Items.Add("");                            }    

                     reader.Close();

                     MIConnection miConnection = new MIConnection();

            miConnection.Open();

            MICommand miCommand = miConnection.CreateCommand();

                     MapInfo.Data.Table t = MapInfo.Engine.Session.Current.Catalog.GetTable("厦门市二级单位点");

                     MapInfo.Styles.Style 

            MapInfo.Geometry.FeatureGeometry coord = new MapInfo.Geometry.Point(MapControl1.Map.GetDisplayCoordSys(),118.11238176,24.53259620);

                     miCommand.CommandText = "insert into " + t.Alias + "(Obj, NAME) values(@po, @str)";

            miCommand.Parameters.Add("@po", coord);

            miCommand.Parameters.Add("@str", "Testing");

            miCommand.ExecuteNonQuery();

            miCommand.Dispose();

            miConnection.Close();

            miConnection.Dispose();

 

读取线的节点坐标程序
private void menuItem2_Click(object sender, System.EventArgs e)
{
string TableList = null;
string tabname=null;
foreach (MapInfo.Data.Table tab in MapInfo.Engine.Session.Current.Catalog)
{
  TableList = TableList + "Table: " + tab.ToString() + "\n";
  if (tab.ToString().IndexOf ("Highway")>0) tabname=tab.Alias.ToString();
  Console.WriteLine("Table: " + tab.ToString());
    
}

MapInfo.Data.Feature myfc=MapInfo.Engine.Session.Current.Catalog.SearchForFeature(tabname,MapInfo.Data.SearchInfoFactory.SearchWhere("Highway='I 10'"));
MapInfo.Geometry.MultiCurve c=(MapInfo.Geometry.MultiCurve)myfc.Geometry ;

 

foreach(MapInfo.Geometry.Curve c1 in c)
{

  MapInfo.Geometry.DPoint []d=c1.SamplePoints();
  for (int i=0;i<c.MultiCurveEditor[0].ControlPointCount;i++)
  {
   MessageBox.Show(this,d.x.ToString()+","++d.y.ToString());
  }}
}  

如何查看整个地图

Map map = mapControl1.Map;
ImapLayerFilter lyrFilter= MapLayerFilterFactory.FilterByType(typeof(FeatureLayer));
MapLayerEnumerator lyrEnum= map.Layers.GetMapLayerEnumerator(lyrFilter);
map.SetView(lyrEnum);

或者:

   Map map = mapControl1.Map;
   IMapLayerFilter lyrFilter = new FilterByLayerType(LayerType.Normal);
   MapLayerEnumerator lyrEnum= map.Layers.GetMapLayerEnumerator(lyrFilter);
   map.SetView(lyrEnum);

 

问:如何在桌面程序中更改地图的坐标系?
答:代码如下:
    using MapInfo.Geometry;
    //要使用到MapInfo.Geometry命名空间
    Map map = mapControl1.Map;
    MapInfo.Geometry.CoordSys coordSys = Session.Current.CoordSysFactory.CreateLongLat(DatumID.NAD83);
    //DatumID为枚举类型,其中列出了经纬度坐标系统的大量枚举类型,参阅帮助可获取更多信息。
    map.SetDisplayCoordSys(coordSys);

问:在C#应用中如何读取存在ORACLE(或SQL Server)中的MapInfo表?
答:读取ORACLE中表的方法如下代码:
   using MapInfo.Data;           //这里要添加对MapInfo数据的引用

   MIConnection Connection=new MIConnection();
   Connection.Open();
   MapInfo.Data.Table [] tables=new MapInfo.Data.Table[4];

   TableInfoServer tis1=new TableInfoServer("WORLD","SVR=MYORACLE;UID=system;PWD=manager","select * from world",MapInfo.Data.ServerToolkit.Oci);
   tables[0]=Connection.Catalog.OpenTable(tis1);
   TableInfoServer tis2=new TableInfoServer("WORLDCAP","SVR=MYORACLE;UID=system;PWD=manager","select * from worldcap",MapInfo.Data.ServerToolkit.Oci);
   tables[1]=Connection.Catalog.OpenTable(tis2);
   TableInfoServer tis3=new TableInfoServer("wldcty25","SVR=MYORACLE;UID=system;PWD=manager","select * from wldcty25",MapInfo.Data.ServerToolkit.Oci);
   tables[2]=Connection.Catalog.OpenTable(tis3);
   TableInfoServer tis4=new TableInfoServer("OCEAN","SVR=MYORACLE;UID=system;PWD=manager","select * from OCEAN",MapInfo.Data.ServerToolkit.Oci);
   tables[3]=Connection.Catalog.OpenTable(tis4);

   MapControl1.Map.Load(new MapInfo.Mapping.MapTableLoader(tables));
   Connection.Close();

  而读取存放在SQL Server2000中的表时,应当使用如下修改过的代码:

   /* SQL Server数据库连接*/
   MIConnection Connection=new MIConnection();
   Connection.Open();
   MapInfo.Data.Table [] tables=new MapInfo.Data.Table[2];
   TableInfoServer tis1=new TableInfoServer("CH_SHENGHUI","DRIVER={SQL Server};SERVER=YC31;DATABASE=MYWEBGIS;Trusted_Connection=Yes","select * from CH_SHENGHUI",MapInfo.Data.ServerToolkit.Odbc);//注意这里使用的是Odbc,且区分大小写。
   tables[0]=Connection.Catalog.OpenTable(tis1);
   TableInfoServer tis2=new TableInfoServer("CH_SHENGJIE_P","DRIVER={SQL Server};SERVER=YC31;DATABASE=MYWEBGIS;Trusted_Connection=Yes","select * from CH_SHENGJIE_P",MapInfo.Data.ServerToolkit.Odbc);//注意这里使用的是Odbc,且区分大小写。
   tables[1]=Connection.Catalog.OpenTable(tis2);
   mapControl1.Map.Load(new MapInfo.Mapping.MapTableLoader(tables));
   Connection.Close();
   /*上面的TableInfoServer语句分开来写可以表达成如下方法。*/
   /*
   TableInfoServer tiServer = new TableInfoServer("SHENGHUI");
   tiServer.ConnectString = "DRIVER={SQL Server};SERVER=YC31;DATABASE=MYWEBGIS;Trusted_Connection=Yes";
   tiServer.Query = "Select * from CH_SHENGHUI";
   tiServer.Toolkit = ServerToolkit.Odbc;

   MapTableLoader tl = new MapTableLoader(tiServer);

   mapControl1.Map.Load(tl);
   */

问:在C#桌面与Web应用中读取硬盘上MapInfo表一法
答:二者皆可使用如下代码:
  using MapInfo.Data;
  MIConnection Connection=new MIConnection();
  Connection.Open();
  tables[0]=Connection.Catalog.OpenTable(@"G:\Ch_shenghui.TAB");
  tables[1]=Connection.Catalog.OpenTable(@"G:\Shengjie_p.TAB");
  mapControl1.Map.Load(new MapInfo.Mapping.MapTableLoader(tables));

问:如何在MapXtreme2004桌面应用程序中的任务栏上显示出鼠标的坐标?
答:
1、添加mapControl1的MouseMove事件;
2、该事件及其中代码如下:
public void MapControl1_MouseMove(object sender, MouseEventArgs e)
{
    System.Drawing.PointF DisplayPoint = new PointF(e.X,e.Y);

    MapInfo.Geometry.DPoint MapPoint = new MapInfo.Geometry.DPoint();
    MapInfo.Geometry.DisplayTransform converter = this.mapControl1.Map.DisplayTransform;
    converter.FromDisplay(DisplayPoint, out MapPoint);
    this.statusBar1.Text = "Cursor Location: " + MapPoint.x.ToString() + ", " + MapPoint.y.ToString();
}

问:如何使用代码修改桌面应用程序的坐标系统
答:代码如下:
Map map = mapControl1.Map;
MapInfo.Geometry.CoordSys coordSys = Session.Current.CoordSysFactory.CreateLongLat(DatumID.WGS84);
map.SetDisplayCoordSys(coordSys);
posted on 2005-09-08 11:53  海边拾贝  阅读(1470)  评论(0)    收藏  举报