`
hj270187161
  • 浏览: 21977 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MapXtreme入门资料(转)

    博客分类:
  • GIS
 
阅读更多
转载自 vhome
最终编辑 _blackjack
由于项目的需要我现在又开始研究GIS了。由于我们项目是用.net开发的,所以GIS工具也是当前最新的MapXtreme2004,对于新事物我都有一种冲动,所以研究起来也相当有劲,
不过这个也不是那么容易,中文资料太少(本人英语水平有限,正在努力中……),通过网络还是找到了很多零散的资料,在此整理一下。留于以后研究。
1.asp.net中如何用MapControl 动态加载地图
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应用问答- - by jerry429
问:如何在桌面程序中更改地图的坐标系?
问:在C#应用中如何读取存在ORACLE(或SQL Server)中的MapInfo表?
问:在C#桌面与Web应用中读取硬盘上MapInfo表一法
问:如何在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);
   */
问:在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);

7.在一个程序中要找到固定点附近最近的图元,于是想用SearchNearst。
但是总是出现异常,说"不能对NonEarth坐标系应用Spherical操作"
所以想问一下,MXT04中的SearchNearst方法是不是不支持NonEarth坐标系?
//这个问题在MapXtreme2004的6.0和6.1版本都会有。以后版本会改正。
//暂时解决方案:在经纬度投影坐标系中操作。
   try
   {
    MapInfo.Mapping.Map _map=mapControl1.Map;
    MapInfo.Data.Catalog _catalog=Session.Current.Catalog;
    //打开非地球坐标系的图层,并设置地图坐标系
    mapControl1.Map.Load(new MapTableLoader(@"E:\MapInfo\培训材料\技术培训教材与PPT\MapXtreme2004\示例\OpenTable\MAP_AREA.TAB"));
    Cursor.Current = Cursors.WaitCursor;
    MapInfo.Geometry.CoordSysFactory cf=new MapInfo.Geometry.CoordSysFactory();
    MapInfo.Geometry.CoordSys Nonearth=cf.CreateFromMapBasicString("CoordSys NonEarth Units \"m\" Bounds (-2000000, -2000000) (2000000, 2000000)");
    _map.SetDisplayCoordSys (Nonearth);
    //确定查找点-为非地球坐标的中心点
    MapInfo.Geometry.DPoint pt=new MapInfo.Geometry.DPoint(_map.Center.x,_map.Center.y);
    //将地图坐标系转换为经纬度投影
    MapInfo.Geometry.CoordSys LonLat=cf.CreateFromMapBasicString("CoordSys Earth Projection 1, 0");
    _map.SetDisplayCoordSys (LonLat);
    //将非地球坐标下的查找点转换我经纬度投影下的点
    MapInfo.Geometry.CoordinateTransform Transformer=cf.CreateCoordinateTransform(LonLat,Nonearth);
    MapInfo.Geometry.DPoint dpt=Transformer.CoordSys2ToCoordSys1(pt);
    //设置查找半径
    Distance d = MapInfo.Mapping.SearchInfoFactory.ScreenToMapDistance(_map, 3);
    SearchInfo si = MapInfo.Data.SearchInfoFactory.SearchNearest(dpt, LonLat, d);
    IResultSetFeatureCollection fc = _catalog.Search("MAP_AREA", si);
    Session.Current.Selections.DefaultSelection.Add(fc);
   }
   finally
   {
    Cursor.Current = Cursors.Default;
   }
nonearth问题在6.2中已经完全解决.
8.有两个MapControls,怎样使其中一个保存为.MWS
MapInfo.Persistence.WorkSpacePersistence wsp = new MapInfo.Persistence.WorkSpacePersistence();
System.IO.FileStream file = new System.IO.FileStream("C:\temp\Test.mws", System.IO.FileMode.CreateNew);
wsp.Save(this.mapControl2.Map.Clone() as MapInfo.Mapping.Map,file);
file.Close();
9.查看特定几个图层
假定让lyr1和lyr2两个图层充满整个地图窗口:
Table[] ts= new Table[2];
ts[0] = lyr1.Table;
ts[1] = lyr2.Table;
IMapLayerFilter iml = MapLayerFilterFactory.FilterByTable(ts);
MapLayerEnumerator mle = mapControl1.Map.Layers.GetMapLayerEnumerator(iml);
mapControl1.Map.SetView(mle);
10.//创建临时层
TableInfoMemTable tblInfoTemp = new TableInfoMemTable("Animation");
MapInfo.Data.Table tblTemp = cat.GetTable("Animation");
if (tblTemp != null) //Table exists close it
{
cat.CloseTable("Animation");
}
tblInfoTemp.Columns.Add(ColumnFactory.CreateFeatureGeometryColumn(MapControl1.Map.GetDisplayCoordSys()));
tblInfoTemp.Columns.Add(ColumnFactory.CreateStyleColumn());
tblInfoTemp.Columns.Add(ColumnFactory.CreateStringColumn("NAME", 40));
tblInfoTemp.Columns.Add(ColumnFactory.CreateStringColumn("Dept", 15));
tblInfoTemp.Columns.Add(ColumnFactory.CreateIntColumn("Level")); //TableInfoMemTable是TableInfo类继承来的
tblTemp = cat.CreateTable(tblInfoTemp);
FeatureLayer lyr = new FeatureLayer(tblTemp);
MapControl1.Map.Layers.Add(lyr);


1.从ORACLE表中加载图层的问题。。。
MIConnection Connection=new MIConnection();
Connection.Open();
TableInfoServer tis1=new TableInfoServer("WORLD",
   "SRVR=ora8i;UID=wzz;PWD=11111111",
   "select * from world",MapInfo.Data.ServerToolkit.Oci);
MapInfo.Data.Table [] tables=new MapInfo.Data.Table[2];
tables[0]=Connection.Catalog.OpenTable(tis1);
TableInfoServer tis2=new TableInfoServer("WORLDCAP",
"SRVR=ora8i;UID=wzz;PWD=11111111",
"select * from worldcap",MapInfo.Data.ServerToolkit.Oci);
tables[1]=Connection.Catalog.OpenTable(tis2);
MapControl1.Map.Load(new MapInfo.Mapping.MapTableLoader(tables));

2.存在SqlSever中XY坐标点的绑定代码
//XY绑定:含有x,y坐标点的图层放置在Sql Server数据库中,按xy坐标生成点图层
//1.要在存在该表的数据库中建立MAPINFO_MAPCATALOG表,否则会报错:
//"An unhandled exception of type 'MapInfo.Data.TableException' occurred in mapinfo.coreengine.dll.
//Additional information: 不能打开表。 ODBC 错误: ODBC RC=-1, ODBC SQLState=S0002, DBMS RC=208, DBMS Msg=[Microsoft][ODBC SQL Server Driver][SQL Server]对象名 'MAPINFO.MAPINFO_MAPCATALOG' 无效。
//2.要含xy坐标点的表建立主键,否则会报错:
//"Additional information: 不能打开表。因为不能识别唯一键,不能访问远程数据。"

   //建立XY空间方案
   MapInfo.Data.SpatialSchemaXY xy = new MapInfo.Data.SpatialSchemaXY();
   xy.XColumn = "X";
   xy.YColumn = "Y";
   xy.NullPoint = "0.0, 0.0";
   xy.StyleType = MapInfo.Data.StyleType.None;
   xy.DefaultStyle = new MapInfo.Styles.CompositeStyle();
   xy.CoordSys = MapInfo.Engine.Session.Current.CoordSysFactory.CreateLongLat(MapInfo.Geometry.DatumID.WGS84);

   //建立TableInfo
   MapInfo.Data.TableInfoServer ti = new MapInfo.Data.TableInfoServer("Customers","Driver={SQL Server};Server=LIXIAOHUI;Database=test;Uid=sa;Pwd=sa;","select * from Us_Cust",MapInfo.Data.ServerToolkit.Odbc);
   ti.SpatialSchema = xy;
   MapInfo.Data.Table miCustomers = MapInfo.Engine.Session.Current.Catalog.OpenTable (ti);
   MapInfo.Mapping.FeatureLayer featureLayer = new MapInfo.Mapping.FeatureLayer(miCustomers);
   mapControl1.Map.Layers.Add(featureLayer);
   mapControl1.Map.SetView(featureLayer);

3.如何查看整个地图
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);
分享到:
评论

相关推荐

    mapXtreme 入门资料大全

    这份“MapXtreme入门资料大全”是你开始学习和掌握MapXtreme的理想资源。 首先,让我们深入了解一下MapXtreme的核心概念: 1. **地图对象模型**:MapXtreme基于一个复杂的地图对象模型,包括地图、图层、图例、...

    MapXTreme入门培训教程

    总结,MapXTreme入门培训教程将全面覆盖从安装配置到高级应用的各个环节,通过学习,你将能够熟练地运用MapXTreme开发出功能丰富的地图应用,为工作或研究带来便利。无论你是GIS新手还是有一定经验的开发者,这个...

    mapxtreme 入门教程.rar

    以上内容涵盖了MapXtreme入门教程的主要知识点,通过学习和实践,你将具备使用MapXtreme进行地图开发的基本技能。文档“Mapxtremel.ppt”很可能是这个教程的幻灯片部分,包含详细步骤和示例,是学习的重要参考资料。...

    Mapxtreme for java 入门示例简单图解1

    在本文中,我们将深入探讨Mapxtreme for Java的入门示例,通过简单的图解来帮助初学者理解其核心概念和使用方法。 1. **Mapxtreme简介** Mapxtreme是Extremesoft公司开发的一款产品,它提供了丰富的API和控件,...

    Mapxtreme for java 入门示例简单图解3

    总的来说,MapXtreme for Java的入门示例展示了如何在JSP页面中嵌入地图,通过Servlet处理地图相关的请求,并利用`iframe`标签动态加载不同主题的地图。这仅仅是MapXtreme功能的冰山一角,深入学习和实践可以帮助...

    Mapxtreme for java 入门示例简单图解2

    在这个"MapXtreme for Java 入门示例简单图解2"中,我们将深入探讨如何使用MapXtreme与Servlet技术相结合,以实现Web上的动态地图服务。 首先,Servlet是一种Java服务器端程序,用于处理HTTP请求并返回响应。在...

    Mapxtreme_for_java_入门示例简单图解2.doc

    ### MapXtreme for Java 入门示例详解 #### 一、HTMLEmbeddedMapServlet实例解析 HTMLEmbeddedMapServlet是MapXtreme for Java提供的一种嵌入式地图服务实例,用于展示如何在Java Web应用中集成地图功能。此实例...

    Mapxtreme for java 入门示例简单图解4

    总的来说,这个Mapxtreme for Java入门示例展示了如何结合Servlet和JSP来实现地图应用的基本交互。通过JavaScript与服务器端的Servlet通信,实现了地图的动态操作,如放大、获取中心点等。理解这个示例有助于开发者...

    Mapxtreme for java 入门示例简单图解2(bak)

    在本入门示例中,我们将深入理解如何使用Mapxtreme的Servlet类来创建和展示地图服务。Mapxtreme的核心功能在于它能将复杂的地理数据转化为用户友好的交互式地图,这在Web应用中尤其有用。 首先,让我们详细了解一下...

    Mapxtreme for java 入门示例简单图解5

    在这个“MapXtreme for Java入门示例简单图解5”中,我们将深入探讨如何使用MapXtreme for JSP和Servlet来构建地图应用。 首先,让我们了解MapXtreme for JSP的核心概念。JSP(JavaServer Pages)是Java的一种动态...

    mapxtreme for java 的开发实例,有注解.入门用maptrmemforjava

    入门用maptrmemforjava”这个资源中,我们可以找到一些初学者级别的代码示例,帮助理解如何使用MapXtreme for Java。 首先,让我们详细了解一下MapXtreme for Java的核心知识点: 1. **地图对象模型**:MapXtreme ...

    MapXtreme二次开发资料

    开发手册是入门的重要资料,它详细介绍了MapXtreme的对象模型、类库、方法和属性,以及如何创建、加载地图、添加图层、处理地理数据等方面的知识。手册中还会涵盖事件处理、地图操作、空间查询等功能的实现步骤。 ...

    MapXtreme_CHM_中文帮助文档

    该文档通常包括了快速入门、用户指南、开发者参考等多个部分,对于初学者和经验丰富的用户来说都是不可或缺的参考资料。 2. "howdoi.chm":尽管这个文件名没有明确表明与MapXtreme的关联,但根据上下文,它可能包含...

    MapXtreme 2005 从入门到精通

    在使用 MapXtreme 2005 设计分布式应用程序时必须考虑许多因素。有些因素是 MapXtreme 设计决定,其它因素是 Microsoft 技术设计模式。本章将让您了解一些必须做出的决定,并 展示如何做出符合应用程序类型的正确...

    mapxtreme2004教程

    本教程旨在为初学者提供一个全面的入门指南,帮助他们了解并掌握 MapXtreme 2004 的基本操作和高级特性。 1. **MapXtreme 2004 简介**:MapXtreme 是一款基于 Java 技术的 Web GIS 解决方案,它允许用户通过互联网...

    MapXtreme使用教程

    在安装MapXtreme之后,初学者可以通过入门指南学习如何创建、更新和部署应用程序。例如,在Visual Studio中创建应用程序时,开发者可以选择不同的项目模板,如地图应用程序、*** Web应用程序等。MapXtreme控件允许...

    Mapxtreme_for_java_入门示例简单图解1.doc

    《MapXtreme for Java 入门示例详解》 MapXtreme for Java 是一款由MapInfo公司推出的GIS(地理信息系统)开发工具,专为Java开发者设计,旨在简化地图应用的开发流程,提供丰富的地图操作功能。对于初学者而言,...

    MapXtreme2005开发指南

    MapXtreme 2005的开发指南是入门该平台的重要资源,它详尽地讲解了如何使用MapXtreme 2005进行开发工作。对于初学者而言,这份指南涵盖了以下关键知识点: 1. **安装与配置**:介绍如何下载并安装MapXtreme 2005,...

    MapXtreme 2005 技术手册

    - **文档资源**:包括用户手册、API文档、示例代码等,覆盖了从入门到高级的所有内容。 - **社区交流**:鼓励用户参与官方论坛和社区,与其他开发者交流经验技巧。 #### 五、安装与配置 - **系统需求**: - 最低...

Global site tag (gtag.js) - Google Analytics