在窗体上放置好MapControl后,可以用代码的方式来添加图层了,可以向MapControl.Map的属性去添加图层,这个属性是一个地图层,可以通过三种方法来加载地图,MapControl.Map是个Map的类型,表示地图,这个类型有一个Load的方法,支持三种类型的地图:Geoset,Workspace,Tables三种,因为Load方法是一个MapLoader的抽象类,类MapGeosetLoader,MapWorkSpaceLoader,MapTableLoader分别代表三种地图,这几种Loader的构造都是字符串类型,即三种文件的路径,三种文件的扩展名为*.gst,*.mws和*.tab。 现在画一个图层,有两组折线,图层命名为test.tab
首先分析这两组折线,第一组折线由5个点构成,第二组折线有3个点构成,这个图层对应的Table应该有两行数据。
下面的代码实现了对图层点的查询: Catalog Cat = MapInfo.Engine.Session.Current.Catalog; Table tblTemp = Cat.GetTable("a"); DataTable dt = new DataTable(); MIDataReader dr = tblTemp.ExecuteReader(); dt.Load(dr); dataGridView1.DataSource = dt; for (int i = 0; i < dt.Rows.Count; i++) { MultiCurve mc = dt.Rows[i].ItemArray[0] as MapInfo.Geometry.MultiCurve; Curve cur = mc[0]; foreach (var v in cur.SamplePoints()) { MessageBox.Show("X:" + v.x + " Y:" + v.y); } } 用ADO.NET的方式进行查询: MIConnection con = new MIConnection(); MICommand cmd = con.CreateCommand(); cmd.CommandText = "select * from a"; con.Open(); MIDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { MapInfo.Geometry.MultiCurve mc = dr.GetValue(0) as MapInfo.Geometry.MultiCurve; Curve cur = mc[0]; foreach (var v in cur.SamplePoints()) { MessageBox.Show("X:" + v.x + " Y:" + v.y); } } dr.Close(); con.Close();
|