SuperMap Objects.NET C#组件开发之创建地图并添加基本功能

一、创建新工程

1.在本地磁盘下自定义创建一个文件夹,如 C:\MyProject。
2.下载数据文件 Workspace_Map.zip.(包含World.sdb和World.sdd)到工作目录 C:\MyProject 中。
3.启动 Microsoft Visual Studio .NET。 (这里使用的Visual Studio2008)
4.在文件夹 C:\Myproject 下新建 C# 工程的一个 Windows Application,命名为:MyFirstSuperMap。

在这里插入图片描述

二、将4个SuperMap控件添加到Visual Studio ToolBox(工具箱):

1.在 ToolBox(工具箱)上单击鼠标右键,点击"Add Tab"(添加选项卡),键入 SuperMap 作为名称。
2.在 ToolBox(工具箱)上单击鼠标右键,点击"Choose Items…"(选择项),出现如下对话框:
在这里插入图片描述

3.将"SuperMap Legend Control(因为版本不同,有些是xxx控件不是xxxControl,但它们作用是一样的)"、“SuperMap Control”、“SuperWorkspace Control”、“SuperWorkspace Manager Control”添加Visual Studio ToolBox(工具箱)。这里以选中“SuperMap Control” 和 “SuperWorkspace Control”为例,点击确定。ToolBox 中即出现下图所示两个控件:
在这里插入图片描述

三、打开地图和添加图层

1.将窗体的NAME属性命名为 frmMain,
在这里插入图片描述

Text命名为 “SuperMap Objects 开发入门教程”,
在这里插入图片描述

将Visual Studio ToolBox(工具箱)里的 SuperWorkSpace Control 拖拽/点击添加到窗体中并Text命名为 SuperWorkspace1,将 SuperMap Control 添加到窗体中并Text命名为 SuperMap1,如下图所示:
在这里插入图片描述

2.在属性中“frmMain”下的“Load”添加“frmMain_Load”,
在这里插入图片描述

点击“frmMain_Load”,输入如下代码:

    private void frmMain_Load(object sender, System.EventArgs e)
		{
			SuperMap1.Connect(SuperWorkspace1.CtlHandle); //建立地图窗口与工作空间的联系,用于显示数据
			String strAlias; //数据源别名                      
			SuperMapLib.seEngineType nEngineType; //数据源引擎类型
			String strDataSourceName; //数据源所在路径
			SuperMapLib.soDataSource objDataSource; //数据源对象,指向打开的数据源
			bool bReadOnly; //数据源是否只读打开
			bool bAddToHead; //是否将数据集加到地图最上一层显示
			                                                                  
			int i; //数据集索引                                           
			strAlias = "MyDataSource"; //别名可任意,但建议取数据源文件名相同的名称,便于区分
			nEngineType = SuperMapLib.seEngineType.sceSDBPlus; //可打开不同引擎的数据源,此处打开文件型 SDBPlus                       
			strDataSourceName = "C:\\MyProject\\World.sdb"; //数据源所在路径,也可以是相对路径
			                      
			bReadOnly = false; //非只读打开
			                                                                                             
			//打开数据源                                                    
			objDataSource = SuperWorkspace1.OpenDataSource(strDataSourceName, strAlias, nEngineType, bReadOnly);               
			if (objDataSource == null)                           
			{                                                   
				MessageBox.Show( "请将数据源文件(world.sdb,world.sdd)下载到 C:\\MyProject\\World.sdb 目录,再运行程序","打开数据源失败"); 
				return;                                              
			}                                                       
			else                                                                    
			{                                                                       
				//把数据源中的所有图层加入到 SuperMap 中
				for(i=1;i<=objDataSource.Datasets.Count;i++)                                                   
				{                        
					bAddToHead = true;      
					SuperMap1.Layers.AddDataset(objDataSource.Datasets[i], bAddToHead);
				}                                                         
			}                                                              
			SuperMap1.Refresh(); //刷新地图窗口
			
			//可定制选中对象风格,或保持默认
			SuperMap1.selection.Style.PenColor = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.FromArgb(231, 77, 0)));
			SuperMap1.selection.Style.PenWidth = 1;  
			SuperMap1.selection.Style.PenStyle = 1;  
			SuperMap1.selection.Style.BrushStyle = 5;
			SuperMap1.selection.Style.BrushColor = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.FromArgb(115, 69, 140)));
			SuperMap1.selection.Style.BrushBackColor = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.FromArgb(239, 150, 255)));
			SuperMap1.selection.Style.BrushOpaqueRate = 50;
			                                     
			System.Runtime.InteropServices.Marshal.ReleaseComObject(objDataSource);
			objDataSource = null;
		} 

3.在属性中“frmMain”下的“FormClosing”添加“frmMain_Closing”,
在这里插入图片描述

点击“frmMain_Closing”,输入如下代码:


    private void frmMain_Closing(object sender, System.ComponentModel.CancelEventArgs e)   
		{                                                                                      
			//关闭地图窗口及工作空间,注意顺序                                                 
			SuperMap1.Close();                                                                   
			SuperMap1.Disconnect();                                                              
			SuperWorkspace1.Close();                                                             
		}                                                                   

效果图如下所示:
在这里插入图片描述

四、添加地图浏览功能

利用 SuperMap Objects 控件,可以很方便地进行地图的基本操作,如放大、缩小、自由缩放、漫游、全幅显示等。
1.在窗体中加入五个Button控件,设置如下的属性值(其余属性取默认值即可):

NameText
cmdButtonPan漫游
cmdButtonZoomIn放大
cmdButtonZoomOut缩小
cmdButtonZoomFree自由缩放
cmdButtonViewEntire全幅显示

2.在各个按钮的Click事件里加入以下代码,即可实现以上功能。

	          private void cmdButtonViewEntire_Click(object sender, System.EventArgs e)
		{
			this.SuperMap1.ViewEntire(); //全幅显示
		}
		
		private void cmdButtonZoomIn_Click_1(object sender, System.EventArgs e)
		{
			this.SuperMap1.Action=SuperMapLib.seAction.scaZoomIn;   //放大
		}
		
		private void cmdButtonZoomOut_Click_1(object sender, System.EventArgs e)
		{
			this.SuperMap1.Action = SuperMapLib.seAction.scaZoomOut;  //缩小 
		}

		private void cmdButtonPan_Click_1(object sender, System.EventArgs e)
		{
			this.SuperMap1.Action = SuperMapLib.seAction.scaPan;  //漫游          
		}

		private void cmdButtonZoomFree_Click_1(object sender, System.EventArgs e)
		{
			this.SuperMap1.Action = SuperMapLib.seAction.scaZoomFree;  //自由缩放   
		}		
	

效果图如下所示:
在这里插入图片描述

五、地图到属性查询

1.在窗体中加入一个button控件并设置它的属性值:

NameText
cmdQueryProperties图查属性

2.把按钮中要响应的代码键入到“cmdQueryProperties_Click(object sender, System.EventArgs e)”中:


    private void cmdQueryProperties_Click(object sender, System.EventArgs e)
		{
			this.SuperMap1.Action=SuperMapLib.seAction.scaSelect; //图查属性      
		}                                                                   

在 SuperMap 控件的事件“GeometrySelected”中键入如下代码:

    private void SuperMap1_GeometrySelected(object sender, AxSuperMapLib._DSuperMapEvents_GeometrySelectedEvent e)      
		{                                                                                                                   
			SuperMapLib.soSelection objSelection;                                                                            
			SuperMapLib.soRecordset objRd;                                                                                   
                                                                                                                        
			objSelection=this.SuperMap1.selection;                                                                           
			objRd=objSelection.ToRecordset(false); //提取所选对象的属性数据                                                  
                                                                                                                        
			string str="";                                                                                                   
			for (int i=1 ;i<=objRd.FieldCount;i++)                                                                           
			{                                                                                                                
				str+=objRd.GetFieldInfo(i).Name ; //得到属性名                                                                  
				str+=":"+objRd.GetFieldValue(i).ToString()+"\n"; //得到属性值                                                   
			}                                                                                                                
			MessageBox.Show(str,"MyFirstSuperMap");                                                                          
                                                                                                                        
			System.Runtime.InteropServices.Marshal.ReleaseComObject(objSelection);
			objSelection=null;
			System.Runtime.InteropServices.Marshal.ReleaseComObject(objRd);
			objRd=null;                                                                                                     
		}                                                                                                                   `

下图是图查属性时的效果:
在这里插入图片描述

六、属性到地图的查询

1.在窗体中加入一个Label控件、button控件和一个TextBox控件,并设置它们的属性值如下:

NameText
lblQueryLabel漫游
txtExpression矩形方框
cmdQueryMap自由缩放

2.把按钮响应的代码加入到 cmdQueryMap_Click(object sender, System.EventArgs e) :


   private void cmdQueryMap_Click(object sender, System.EventArgs e)
		{
			if (this.txtExpression.Text=="")                                                 
			{                                                                           
				MessageBox.Show("查找信息不能为空");                                       
				return;                                                                    
			}                                                                           
                                                                                  
			SuperMapLib.soDatasetVector objDtv; //矢量数据集                        
			SuperMapLib.soDataset objDt;                                                
			SuperMapLib.soSelection objSelection; //选择集                          
			SuperMapLib.soRecordset objRd; //记录集                             
                                                                                  
			//取矢量数据集:取其中面数据集"World"进行查询                               
			objDt=this.SuperWorkspace1.Datasources["MyDataSource"].Datasets["World"];   
			objDtv=(SuperMapLib.soDatasetVector)objDt;                                  
			//使用 SQL 过滤条件从数据集中查询出记录集,SQL 条件的 WHERE 子句部分从编辑框中获取。( Query 方法只适用于 soDatasetVector 类对象)   
			objRd=objDtv.Query(this.txtExpression.Text,true,null,"");                        
			//将查询结果加入到选择集中,使其高亮显示                              
			objSelection=this.SuperMap1.selection;                                      
			objSelection.FromRecordset(objRd);                                          
			//刷新地图窗口                                                              
			this.SuperMap1.Refresh();                                                
                                                                                  
			System.Runtime.InteropServices.Marshal.ReleaseComObject(objRd);
			objRd=null;
			System.Runtime.InteropServices.Marshal.ReleaseComObject(objDt);
			objDt=null;
			System.Runtime.InteropServices.Marshal.ReleaseComObject(objDtv);
			objDtv=null;
			System.Runtime.InteropServices.Marshal.ReleaseComObject(objSelection);
			objSelection=null;    
		}                                                                                                     

3.在编辑框中输入查询条件,如:smid<50,单击"属性查图"按钮,得到如下结果: (smid不分大小写,Workspace_Map.sdb中的中国smid是247)
在这里插入图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SuperMap iObjects .NET是一种基于.NET平台的GIS开发框架,它提供了一系列的GIS组件和API,可以帮助开发者快速构建高效、稳定的GIS应用程序。SuperMap iObjects .NET支持多种数据格式和数据源,包括Oracle、SQL Server、PostgreSQL、MySQL等数据库,以及Shapefile、GeoJSON、KML等常见的地理数据格式。同时,它还提供了丰富的地图显示和分析功能,如地图渲染、空间查询、空间分析等,可以满足各种GIS应用的需求。 ### 回答2: SuperMap iObjects .NET 是一款针对 .NET 开发者的 GIS 开发框架,它提供了一组完整的 GIS 控件、类库和 API,开发者可以使用这些工具来快速构建并定制化自己的 GIS 应用程序。 此框架可以轻松处理几何计算、数据连接、符号设计、地图绘制、空间分析和数据查询等功能。同时,SuperMap iObjects .NET 还支持多种数据格式,包括文件格式(如 Shapefile、KML、GPX 等),数据库格式(如 Oracle、SQL Server、MySQL 等),以及 OGC 标准格式(如 WMS、WFS、WCS 等)。 此外,SuperMap iObjects .NET 还提供了一套完整的开发工具,包括 SuperMap iDesktop、SuperMap iServer、SuperMap iPortal 和 SuperMap iMobile。SuperMap iDesktop 是一个功能强大的桌面 GIS 开发环境,提供了丰富的可视化编辑功能、数据管理功能、以及符号化和分析工具。SuperMap iServer 是一款高性能的 GIS 服务器,能够处理海量的 GIS 数据和请求,支持多系统、多平台引擎,兼容多种 GIS 标准和协议。SuperMap iPortal 是一个面向 Web 的 GIS 应用管理平台,便于用户快速发布和共享 GIS 数据、工具和应用。SuperMap iMobile 是一套移动端 GIS 应用开发平台,可以帮助开发者快速构建定制化的移动 GIS 应用程序。 总之,SuperMap iObjects .NET 是一款强大且全面的 GIS 开发框架,具有多种数据格式支持、良好的性能和灵活的定制化功能。它可以帮助开发者快速构建高质量的 GIS 应用程序,并具有广泛的应用范围,涉及地理信息、城市规划、资源管理、环境保护、公共安全等多个领域。 ### 回答3: SuperMap iObjects .NET是一款开发GIS应用程序的.NET框架,它提供了一系列的GIS组件和工具,方便开发人员实现GIS功能。这款产品具有如下的特点: 1.多种数据源支持:SuperMap iObjects .NET支持多种常见的数据格式(例如GDB,PostgreSQL,Oracle等),方便GIS程序访问和处理各种数据。 2.丰富的空间数据分析功能:SuperMap iObjects .NET提供了各种空间数据分析功能,例如空间查询、缓冲区分析、空间叠加、空间统计等,可以方便地实现复杂的GIS分析需求。 3.强大的空间可视化功能:SuperMap iObjects .NET提供了各种数据可视化工具,可以轻松实现图层风格设置、标注、符号等功能,使得GIS地图更加美观、精准。 4.支持跨平台开发SuperMap iObjects .NET可以支持不同平台的开发,包括桌面、Web、移动等,方便不同应用需求的实现。 总之,SuperMap iObjects .NET是一款开发GIS应用程序的强大框架,它提供了完整的GIS解决方案和开发工具,可以大幅提升开发人员的工作效率,同时也能够满足各种GIS应用场景的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值