ArcEngine批量添加XY数据
使用ArcGIS Desktop “添加XY数据”或者“创建XY事件图层”工具 可以导入Excel坐标数据,生成临时图层并添加至ArcMap、ArcGlobe或者ArcScene中。在ArcEngine中可以利用GP工具(MakeXYEventLayer)将某个 x,y 坐标表添加到地图、globe 或 scene 中。该数据表中必须包含两个字段:一个用于 x 坐标,一个用于 y 坐标。Excel表的表头最好字段放至第一行,否则会报错。原本想直接将MakeXYEventLayer创建事件图层添加至地图中,但是至今未想到方法。只有暂时生成要素类导出至磁盘中,再添加至地图中。如果高手们有其他方法,希望不吝赐教。
实现思路:
第一步:读取Excel数据表,提取表名、X字段、Y字段
第二步:实例化数据管理工具MakeXYEventLayer
第三步:实例化Geoprocessor,并执行数据管理工具MakeXYEventLayer
第四步:使用复制要素工具将此事件图层导出为磁盘上的要素类
第五步:加载要素至图层中
主要代码如下:
GP执行MakeXYEventLayer工具并复制图层至文件地理数据库中
/// <summary>
/// 执行MakeXYEventLayer工具,并将创建的临时图层转换为要素类
/// </summary>
/// <param
name="xyEventLayer">XY 事件图层tool</param>
/// <param
name="out_Layer_Path">要素输出路径</param>
/// <returns></returns>
private IFeatureClass ConvertExcelToFeatureClass(MakeXYEventLayer
xyEventLayer, string
out_Layer_Path)
{
try
{
Geoprocessor GP = new Geoprocessor();
GP.OverwriteOutput =
true;
GP.Execute(xyEventLayer, null);//执行XY事件
//复制要素
ESRI.ArcGIS.DataManagementTools.CopyFeatures cf = new ESRI.ArcGIS.DataManagementTools.CopyFeatures();
cf.in_features =
xyEventLayer.out_layer;
cf.out_feature_class
= out_Layer_Path + xyEventLayer.out_layer;
IGeoProcessorResult
gpResult = GP.Execute(cf, null) as IGeoProcessorResult;
IFeatureClass
_featureClass;
IQueryFilter qf;//查询过滤
IGPUtilities gpUtils
= new
GPUtilitiesClass();
gpUtils.DecodeFeatureLayer(gpResult.GetOutput(0), out _featureClass, out qf);
IFeatureCursor
cursor = featureClass.Insert(true);
return _featureClass;
}
catch (Exception ex)
{
MessageBox.Show("导入要素失败,原因:" + ex.ToString());
return null;
}
}
调用方法,并将要素添加至地图中
//比如Excel文件:大学校区.xls,表包括(sheet1,sheet2,sheet2)
//tableName即表路径,该路径形式例如:D:\\DataFile\\大学校区.xls\\sheet1$
tableName =
m_fileName + "\\" + comtxt_excel.SelectedItem.ToString();
x = comtxt_x.SelectedItem.ToString();//X坐标
y = comtxt_y.SelectedItem.ToString();//Y坐标
outName =
txt_layername.Text;
//添加XY事件
MakeXYEventLayer
MxyLayer = new MakeXYEventLayer(tableName, x, y, outName);
string tempPath =
GetAppDirectory() + "TempData\\Temp.gdb\\";//要素临时存储路径
featureClass =
ConvertExcelToFeatureClass(MxyLayer, tempPath);
if (featureClass != null)
{
pFeatureLater =
new FeatureLayerClass();
pFeatureLater.FeatureClass = featureClass;
pFeatureLater.Name = featureClass.AliasName;
axMapControl1.Map.AddLayer(pFeatureLater as ILayer);
axMapControl1.Extent = axMapControl1.FullExtent;
}
ArcEngine批量添加XY数据的更多相关文章
- ASP.NET MVC用存储过程批量添加修改数据
用Entity Framework 进行数据库交互,在代码里直接用lamda表达式和linq对数据库操作,中间为程序员省去了数据库访问的代码时间,程序员直接可以专注业务逻辑层的编写.但是对于比较复杂的 ...
- spring MVC 后端 接收 前端 批量添加的数据(简单示例)
第一种方式:(使用ajax的方式) 前端代码: <%@ page contentType="text/html;charset=UTF-8" language="j ...
- mysql+php+pdo批量添加大数据
1.使用insert into插入 ini_set('max_execution_time','0');//限制超时时间,因为第一种时间较长,索性设为0不限制 $pdo = new PDO(" ...
- Arcgis10.3在添加XY数据时出现问题
准备通过excel表格(xls格式)中的经纬度生成点数据,但是选择数据的时候报错:连接到数据库失败,常规功能故障,外部表不是预期的格式.如下图所示: 解决方法: 将xls格式的表格另存为csv格式,重 ...
- 前端JS批量添加校验数据唯一性
<script type="text/javascript"> //维护删除数组中的某一项 Array.prototype.remove = function(val) ...
- CI 框架批量添加数据(如果数据库有就更新数据)
model: public function insert_select($values) { $sql = 'INSERT INTO ' . $this->_table_name . '(ar ...
- mybatis 批量将list数据插入到数据库
随着业务需要,有时我们需要将数据批量添加到数据库,mybatis提供了将list集合循环添加到数据库的方法.具体实现代码如下: 1.mapper层中创建 insertForeach(List < ...
- myBatis批量添加实例
<!-- 批量添加中转地数据 --> <insert id="addBatch" parameterType="com.isoftstone. ...
- EF批量添加数据性能慢的问题的解决方案
//EF批量添加数据性能慢的问题的解决方案 public ActionResult BatchAdd() { using (var db = new ToneRoad.CEA.DbContext.Db ...
随机推荐
- jQuery源码:从原理到实战
jQuery源码:从原理到实战 jQuery选择器对象 $(".my-class"); document.querySelectorAll*".my-class" ...
- 利用SQL 建立和删除 LINKED SERVER
USE IS21_xxx; if object_id('tempdb..#tmp') is not null drop table #tmp create table #tmp ( cntr ), i ...
- UIButton的titleLabe setAttributeSting 首次不起作用
环境xcode7.3 ios9.3 真机模拟器均出现 UIButton的titleLabe setAttributeSting 首次不起作用,之后每一次 都正常,百思不得解,无奈之下改变策略,讲but ...
- oracle ||,
|| oracle数据库中的 ||称为 "字符串连接符" 用于连接查询结果,如下: select trade_id,accept_date from A; ------------ ...
- 帝国cms 无法生成静态页
建立目录不成功!请检查目录权限 安装完了帝国网站管理系统(帝国CMS)之后,没有进行初始化内置数据的步骤,而引起的错误.其实只要你按照安装说明一步一步下来就不会出错. 解决办法:初始化内置数据 帝国c ...
- AutoCAD系统变量一览表
p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; t ...
- C++设计模式-Observer观察者模式
Observer观察者模式作用:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己 UML图: S ...
- kettle输入“去除空格类型”设置不上
kettle输入“去除空格类型”设置不上,设置完了还是现实“none”的办法: 在xml中直接将对应处“none”改为“both”,即“去掉两边空格”. 原文来自:http://blog.csdn.n ...
- firebug常用工具
1.console.group("第一组"); console.log(1); console.groupend(); 2.console.dir(对象);//输出对象的所有信息 ...
- win7双系统安装ubuntu并配置常用软件
首先在win7下磁盘清理出来空间具体方法找度娘就行了. 下面开始准备安装: 1.下载easyBCD 2.打开:添加新条目--NeoGub--安装 3.点击配置 修改menu.lst title In ...