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);
浙公网安备 33010602011771号