使用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数据的更多相关文章

  1. ASP.NET MVC用存储过程批量添加修改数据

    用Entity Framework 进行数据库交互,在代码里直接用lamda表达式和linq对数据库操作,中间为程序员省去了数据库访问的代码时间,程序员直接可以专注业务逻辑层的编写.但是对于比较复杂的 ...

  2. spring MVC 后端 接收 前端 批量添加的数据(简单示例)

    第一种方式:(使用ajax的方式) 前端代码: <%@ page contentType="text/html;charset=UTF-8" language="j ...

  3. mysql+php+pdo批量添加大数据

    1.使用insert into插入 ini_set('max_execution_time','0');//限制超时时间,因为第一种时间较长,索性设为0不限制 $pdo = new PDO(" ...

  4. Arcgis10.3在添加XY数据时出现问题

    准备通过excel表格(xls格式)中的经纬度生成点数据,但是选择数据的时候报错:连接到数据库失败,常规功能故障,外部表不是预期的格式.如下图所示: 解决方法: 将xls格式的表格另存为csv格式,重 ...

  5. 前端JS批量添加校验数据唯一性

    <script type="text/javascript"> //维护删除数组中的某一项 Array.prototype.remove = function(val) ...

  6. CI 框架批量添加数据(如果数据库有就更新数据)

    model: public function insert_select($values) { $sql = 'INSERT INTO ' . $this->_table_name . '(ar ...

  7. mybatis 批量将list数据插入到数据库

    随着业务需要,有时我们需要将数据批量添加到数据库,mybatis提供了将list集合循环添加到数据库的方法.具体实现代码如下: 1.mapper层中创建 insertForeach(List < ...

  8. myBatis批量添加实例

    <!-- 批量添加中转地数据 -->      <insert id="addBatch" parameterType="com.isoftstone. ...

  9. EF批量添加数据性能慢的问题的解决方案

    //EF批量添加数据性能慢的问题的解决方案 public ActionResult BatchAdd() { using (var db = new ToneRoad.CEA.DbContext.Db ...

随机推荐

  1. Activity生命周期(深入理解)

    今天看到一篇大神总结Activity的文章,内容甚为详细,特此转载http://www.cnblogs.com/lwbqqyumidi/p/3769113.html Android官方文档和其他不少资 ...

  2. 进程物理内存远大于Xmx的问题分析

    问题描述 最近经常被问到一个问题,”为什么我们系统进程占用的物理内存(Res/Rss)会远远大于设置的Xmx值”,比如Xmx设置1.7G,但是top看到的Res的值却达到了3.0G,随着进程的运行,R ...

  3. SQL时间相关

    SQL --本周第一天 SELECT DATEADD(Day,-(DATEPART(Weekday,getdate())+@@DATEFIRST-)%,getdate()) --or ,getdate ...

  4. IBM Power PC安装sysbench 执行mysql基准测试 --- sysbench安装

    第一步:下载Sysbench http://dev.mysql.com/downloads/benchmarks.html 第二步:解压sysbench 第三步:执行安装步骤 1. ./autogen ...

  5. javascript type操作

    var a; type a;//结果为undefined type b;//结果也是undefinedalert(a);//弹出undefinedalert(b);//错误代码  上述代码,type ...

  6. sql-分组排序

    我们有一张数据表,需要按照[类别]分组按照[时间]排序,并分组显示各自的序号. 表Archive ArchiveId varchar(30) 文章编号非数字 CategoryId int 文章分类Id ...

  7. [SGU495] Kids and Prizes (概率dp)

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=495 题目大意:有N个盒子,里面都放着礼物,M个人依次去选择盒子,每人仅能选一次,如 ...

  8. XData -–无需开发、基于配置的数据库RESTful服务,可作为移动App和ExtJS、WPF/Silverlight、Ajax等应用的服务端

    XData -–无需开发.基于配置的数据库RESTful服务,可作为移动App和ExtJS.WPF/Silverlight.Ajax等应用的服务端   源起一个App项目,Web服务器就一台,已经装了 ...

  9. HBase自动分区

    HBase扩展和负载均衡的基本单位是Region.Region从本质上说是行的集合.当Region的大小达到一定的阈值,该Region会自动分裂(split),当然也可能是合并(merge),合并可以 ...

  10. asp.net中插件开发模式说明

    第一定义接口 /// <summary>          /// 这是插件必须实现的接口,也是主程序与插件通信的唯一接口         /// 换句话说,主程序只认识插件里的这些方法  ...