using MapInfo.Engine; using MapInfo.Mapping; MapControl1.Map.Clear(); MapGeosetLoader gl=new MapGeosetLoader(@"F:\test.gst"); MapControl1.Map.Load(gl); 其实根据不同的格式加载地图的办法也有多种,MapWorkSpaceLoader <2> 创建MSW文件 MapInfo.Persistence.WorkSpacePersistence wsp = new MapInfo.Persistence.WorkSpacePersistence(); wsp.Save ("c:\temp\newwork.mws"); //保存文件 <3> 创建InfoTool的事件 InfoTool的事件与button不一样,而是 InfoRetrieved。 创建后将是这样: private void InfoToolControl1_InfoRetrieved(object sender, MapInfo.Web.UI.WebControls.InfoToolEventArgs e) { string Info = ""; foreach(MapInfo.Data.ITableFeatureCollection fc in e.Features) { foreach(MapInfo.Data.Feature f in fc) { Info= string.Format(Info + f[1].ToString() + " "); } fc.Table.Close(); } } <4> 如何通过web.config来加载地图 在web.config中,在下添加的Key In the HTML view of the form under the mapinfowebuiwebcontrols:MapControl tag, set the following properties: 在HTML视图中,更改 mapinfowebuiwebcontrols:MapControl的属性MapAlias必须以.MSW结尾 UseDesigntimeWorkspace="fale" ,这一句要删除WorkspaceFileName="WebForm1MapControl1.mws" <5> 在添加了新层后如何更新地图让InfoTool可以获取他的信息 MapInfo.Data.Table tab = MapInfo.Engine.Session.Current.Catalog.OpenTable(@"C:\Program Files\MapInfo\MapXtreme2004\Maps\World\world.tab"); MapInfo.Mapping.FeatureLayer fl = new MapInfo.Mapping.FeatureLayer(tab); this.MapControl1.Map.Layers.Add(fl); this.MapControl1.SelectableLayers.Add(fl.Name); <6> MapXtreme2004应用问答 问:如何在桌面程序中更改地图的坐标系? 答:代码如下: 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); */ |