前言
上一篇博文简单介绍了有关交互式编辑绘制的相关操作,这个部分主要认识下数据交换之导入矢量数据的相关操作。
GIS数据交换的目的是实现不同GIS系统之间的互操作性,使得数据能够在不同环境下流动和共享。通过GIS数据交换,用户可以将地理空间数据从一个GIS软件导出到另一个GIS软件,或者将数据从GIS系统中导出到其他应用程序进行进一步处理。
从SuperMap iDesktop帮助文档内可查看到SuperMap支持导入的矢量文件格式,如下图所示,本博文以导入Shp数据为例。

一、有关常用类说明
| DataImport类 | 导入数据类,通过该类可以将外部数据(文件型)导入到SuperMap的格式。 |
| ImportSettingShp类 | ArcView Shape 文件的导入的参数设置类。继承自 ImportSetting 类。 |
二、有关常用方法及属性说明
| DataImport.ImportSettings.Add() | 获取或设置导入设置集合,通过该方法可以完成多个导入任务的设置。 |
| DataImport.Run() | 执行导入数据集的操作,返回导入结果 ImportResult。 |
| ImportResult.SucceedSettings | 获取导入成功的任务的 ImportSetting 集合。 |
三、界面设计
此处仅添加菜单栏下的功能点,由于在原有基础上已经设置过打开文件的弹出窗口控件,此处不再设置。拖拽OpenFileDialog控件部分可跳转以下博文进行查看:
四、功能实现
需要确保程序已添加对程序集SuperMap.Data.Conversion.dll的引用。
1、导入矢量数据
private void OpenShpData_Click(object sender, EventArgs e)
{
//判断当前工作空间是否有打开的数据源
if(D_workspace.Datasources.Count == 0)
{
MessageBox.Show("请打开一个数据源");
return;
}
Datasource datasource = D_workspace.Datasources[0];
//获取一个数据源中未被使用的数据集的名称
string strDsName = datasource.Datasets.GetAvailableDatasetName("");
this.openFileDialog1.Title = "Import Shapefile";
this.openFileDialog1.Filter = "Shape file data(.shp)|*.shp";
this.openFileDialog1.FileName = "";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
DataImport dataImport = new DataImport();
//设置导入信息
ImportSettingSHP importSettingSHP = new ImportSettingSHP();
importSettingSHP.SourceFilePath = this.openFileDialog1.FileName;
importSettingSHP.TargetDatasource = datasource;
importSettingSHP.TargetDatasetName = strDsName;
dataImport.ImportSettings.Add(importSettingSHP);
//执行导入矢量数据
ImportResult importResult = dataImport.Run();
if (importResult.SucceedSettings.Length>0)
{
MessageBox.Show("导入矢量数据成功!", "提示");
//将导入的矢量数据在地图全幅显示
Dataset datasetshp = D_workspace.Datasources[0].Datasets[strDsName];
D_mapControl.Map.Layers.Add(datasetshp, true);
D_mapControl.Map.ViewEntire();
D_mapControl.Refresh();
D_layersControl.Refresh();
}
}
}
2、关联图层管理器控件和地图控件
由于在原有基础上,未将图层管理器控件和地图控件关联,会导致以上代码在添加新数据集到地图并全幅显示时,图层管理器没有任何变化。原有关联控件设置可跳转以下博文进行查看:
SuperMap iObjects .NET 11i二次开发(二)——小白进阶之控件关联与释放资源
https://blog.csdn.net/Adoudoudou_/article/details/135122360?spm=1001.2014.3001.5502因此在原有代码再添加如下代码进行图层管理器控件和地图控件的关联,使得添加新数据集到地图时,图层管理器也会随之更新。
private void Form1_Load(object sender, EventArgs e)
{
//工作空间和控件联动
D_workspaceControl.WorkspaceTree.Workspace = D_workspace;
D_mapControl.Map.Workspace = D_workspace;
//图层管理器和地图控件关联
D_layersControl.Map = D_mapControl.Map;
D_sceneControl.Scene.Workspace = D_workspace;
}

2009

被折叠的 条评论
为什么被折叠?



