zoukankan      html  css  js  c++  java
  • 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;

                    }

  • 相关阅读:
    《Machine Learning in Action》—— 白话贝叶斯,“恰瓜群众”应该恰好瓜还是恰坏瓜
    《Machine Learning in Action》—— 女同学问Taoye,KNN应该怎么玩才能通关
    《Machine Learning in Action》—— Taoye给你讲讲决策树到底是支什么“鬼”
    深度学习炼丹术 —— Taoye不讲码德,又水文了,居然写感知器这么简单的内容
    《Machine Learning in Action》—— 浅谈线性回归的那些事
    《Machine Learning in Action》—— 懂的都懂,不懂的也能懂。非线性支持向量机
    《Machine Learning in Action》—— hao朋友,快来玩啊,决策树呦
    《Machine Learning in Action》—— 剖析支持向量机,优化SMO
    《Machine Learning in Action》—— 剖析支持向量机,单手狂撕线性SVM
    JVM 字节码指令
  • 原文地址:https://www.cnblogs.com/xiexiaokui/p/5790083.html
Copyright © 2011-2022 走看看