arcEngine开发之根据点坐标创建Shp图层

思路

根据点坐标创建Shapefile文件大致思路是这样的:

(1)创建表的工作空间,通过 IField、IFieldsEdit、IField 等接口创建属性字段,添加到要素集中。

(2)根据获取点的坐标信息为属性字段赋值,进而得到图层的要素集

必要元素

将创建 Shapefile 文件代码封装成方法如下,这里说明一下创建一 个 Shapefile 文件至少需要配置的元素:

(1)首先,当我们创建一个shp文件时,ArcMap会自动生成如下字段:

其中shp表示几何字段,我们需要设置 IFile.NameIField.Type 来定义这个字段

(2)其次,如果我们没有设置空间坐标时,会弹出如下对话框:

因此第二步我们需要设置shp文件的空间坐标。 这里是通过设置 IField.GeometryDef 实现的。这个属性其实是IGeometryDef接口,通过对这个接口的 GeometryTypeSpatialReference 属性进行设置即可完成对空间坐标的定义。

代码说明

封装的这段代码里,发现对于 IFeatureIFeatureClass 还是不怎么理解,通过查阅资料发现, IFeature 继承自 IRowIObject ,由于IFeature 可以通过 IFeatureClass 创建而成,因此可以知道的是IFeatureClass 是和ITable处于同一个级别,IFeature 相当于是属性表中的一行。

代码

private IFeatureLayer CreateShpFromPoints(List<CPoint> cPointList,string filePath)
{
    //其中,CPoint为存储点数据的结构体,包含name,x,y属性
    //利用IWorkspaceFactory打开工作空间
    int index = filePath.LastIndexOf(‘\\‘);
    string folder = filePath.Substring(0, index);
    string shapeName = filePath.Substring(index + 1);
    IWorkspaceFactory pWSF = new ShapefileWorkspaceFactoryClass();
    IFeatureWorkspace pFWS = (IFeatureWorkspace)pWSF.OpenFromFile(folder, 0);

    //创建字段编辑所需要的接口
    IFields pFields = new FieldsClass();
    IFieldsEdit pFieldsEdit;
    pFieldsEdit = (IFieldsEdit)pFields;

    //给字段属性、类型赋值
    IField pField = new FieldClass();
    IFieldEdit pFieldEdit = (IFieldEdit)pField;
    pFieldEdit.Name_2 = "Shape";
    pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
    IGeometryDef pGeometryDef = new GeometryDefClass();
    IGeometryDefEdit pGDefEdit = (IGeometryDefEdit)pGeometryDef;
    pGDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;
    //定义坐标系
    ISpatialReferenceFactory pSRF = new SpatialReferenceEnvironmentClass();
    ISpatialReference pSpatialReference = pSRF.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_Beijing1954);
    pGDefEdit.SpatialReference_2 = pSpatialReference;

    pFieldEdit.GeometryDef_2 = pGeometryDef;
    pFieldsEdit.AddField(pField);

    IFeatureClass pFeatureClass;
    pFeatureClass = pFWS.CreateFeatureClass(shapeName, pFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");

     IPoint pPoint = new PointClass();
     for (int j = 0; j < cPointList.Count; j++)
     {
         pPoint.X = cPointList[j].X;
         pPoint.Y = cPointList[j].Y;

         IFeature pFeature = pFeatureClass.CreateFeature();
         pFeature.Shape = pPoint;
         pFeature.Store();
     }

     IFeatureLayer pFeatureLayer = new FeatureLayerClass();
     pFeatureLayer.Name = shapeName;
     pFeatureLayer.FeatureClass = pFeatureClass;
     return pFeatureLayer;
}

原文地址:https://www.cnblogs.com/firepation/p/8507366.html

时间: 2025-01-07 17:55:21

arcEngine开发之根据点坐标创建Shp图层的相关文章

[转] arcgis Engine创建shp图层

小生 原文 arcgis Engine创建shp图层 以创建点图层为例.首先要得到保存文件的地址. SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "Shape文件(*.shp)|*.shp"; saveFileDialog.Title = "新建点形shp文件"; saveFileDialog.CheckFileExists = false; DialogR

C#中GDAL读写shp图层

采用GDAL17的C#库进行shp图层属性表读取和修改操作,C#DLL库解压后包含文件如下: 添加引用主要是带csharp的gdal.ogr.osr三个DLL,程序代码如下: using OSGeo.OGR; using OSGeo.OSR; using OSGeo.GDAL; 1.    读取shp图层操作 public void Reforming(string shpFilePath) { Gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8",

arcengine 开发经典帖 【强烈推荐仔细研读】

转自原文 arcengine 开发经典帖 使用ArcGIS Engine 开发自定义GIS应用: 第一部分:使用ArcGIS Engine 发布自定义GIS应用软件-全面了解ArcGIS Engine的产品. 第二部分:ArcEngine9.2的新特性及变化.(续)--类对比及变化.(续)--(代码转换插件).(续)--ArcEngine新命令,工具.菜单和面板 第三部分:使用 ArcGIS Engine开发应用程序(自定义或嵌入) 第四部分:开发Engine 应用程序的基本原理.(续).(续)

iOS开发UI篇—九宫格坐标计算

iOS开发UI篇—九宫格坐标计算 一.要求 完成下面的布局 二.分析 寻找左边的规律,每一个uiview的x坐标和y坐标. 三.实现思路 (1)明确每一块用得是什么view (2)明确每个view之间的父子关系,每个视图都只有一个父视图,拥有很多的子视图. (3)可以先尝试逐个的添加格子,最后考虑使用for循环,完成所有uiview的创建 (4)加载app数据,根据数据长度创建对应个数的格子 (5)添加格子内部的子控件 (6)给内部的子控件装配数据 四.代码示例 // // YYViewCont

shp图层创建

IField,IFieldEdit,IFields,IFieldsEdit,IGeometryDef,IGeometryDefEdit接口  (2013-05-06 20:40:27) 转载▼ 标签: arcgisengine二次开发 it 分类: ArcGISEngine开发 IField,IFieldEdit,IFields,IFieldsEdit,IGeometryDef,IGeometryDefEdit接口 字段对应表中的一列,一个要素类必须有至少2个字段,而多个字段的集合就构成了字段集

iOS开发UI基础—九宫格坐标计算

iOS开发UI基础-九宫格坐标计算 一.要求 完成下面的布局 二.分析 寻找左边的规律,每一个uiview的x坐标和y坐标. 三.实现思路 (1)明确每一块用得是什么view (2)明确每个view之间的父子关系,每个视图都只有一个父视图,拥有很多的子视图. (3)可以先尝试逐个的添加格子,最后考虑使用for循环,完成所有uiview的创建 (4)加载app数据,根据数据长度创建对应个数的格子 (5)添加格子内部的子控件 (6)给内部的子控件装配数据 四.代码示例 1 // 2 // YYVie

vs2008下如何部署arcengine开发的程序

说实话本想搞WPF+ArcEngine开发的,环境都搭建好了,突然发现貌似有很多授权的问题,唯恐部署软件后不能在其它客户端上使用,而且是项目开发,于是决定先暂时放下这个想法,待联系做研究性系统时再予以开发使用.好了,接下来我将以图解形式详细说明一下如何部署一个arcgis二次开发程序. 所需文件 首先,我先将我们所用到的文件及搭建环境要求列一下. 客户端系统环境:win xp.win7.win8 客户端系统需要安装:dotNetFx35.WindowsInstaller3.1.ArcEngine

Devexpress报表开发(三):创建主从报表

Devexpress报表开发(三):创建主从报表 此教程是在上一篇的基础上教会大家如何使用Devexpress报表控件来创建主从报表的,我们将从以下几步来实现主从报表: 添加从报表数据 创建从报表 设计从报表布局 显示预览结果 1.添加从报表数据 我们打开上一篇文章的工程,然后右击Report Explorer中的sqlDataSource1,选择Manage Queries(查询管理),然后点击添加. 然后我们按照上一篇文章的步骤添加一张与之关联的表,用作从报表数据. 然后我们在右击sqlDa

QGis C++ 开发之创建临时图层并添加要素

        开发环境:Win10 + VS2010 + Qt 4.8.6 + QGis 2.14.4 其实本文实现的功能类似于QGis中"添加文本数据图层"的一个简化版,本文不会涉及到对话框的使用,不通过与用户互交的方式创建要素,而是直接通过代码方式添加点要素,起到一个抛砖引玉的作用. (一)先将整个流程大概梳理下: 1.首先创建一个临时(memory)矢量图层 ; 2.将创建的图层添加到地图画布中 ; 3.创建几何要素 ; 4.将几何要素添加到矢量图层中 ; 5.更新图层范围并刷