思路

根据点坐标创建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;
}

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

  1. [转] arcgis Engine创建shp图层

    小生 原文 arcgis Engine创建shp图层 以创建点图层为例.首先要得到保存文件的地址. SaveFileDialog saveFileDialog = new SaveFileDialog ...

  2. arcgis api 3.x for js 入门开发系列批量叠加 zip 压缩 SHP 图层优化篇(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  3. arcengine 开发经典帖

    http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=25575&page=1&extra= 使用ArcGIS Engine 开发自定义 ...

  4. ArcEngine开发遇到的问题(转)

    ArcEngine开发遇到的问题 https://blog.csdn.net/u013751758/article/category/6971559 转载 2018年02月11日 17:28:11 1 ...

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

    转自原文 arcengine 开发经典帖 使用ArcGIS Engine 开发自定义GIS应用: 第一部分:使用ArcGIS Engine 发布自定义GIS应用软件-全面了解ArcGIS Engine ...

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

    iOS开发UI篇—九宫格坐标计算 一.要求 完成下面的布局 二.分析 寻找左边的规律,每一个uiview的x坐标和y坐标. 三.实现思路 (1)明确每一块用得是什么view (2)明确每个view之间 ...

  7. iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期

    iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期 一.基本过程 新建一个项目,系统默认的主控制器继承自UIViewController,把主控制器两个文件删掉. 在stor ...

  8. iOS开发UI篇—控制器的创建

    iOS开发UI篇—控制器的创建 说明:控制器有三种创建方式,下面一一进行说明. 一.第一种创建方式(使用代码直接创建) 1.创建一个空的IOS项目. 2.为项目添加一个控制器类. 3.直接在代理方法中 ...

  9. 开一个帖子,等有时间了写写如何用shapelib创建点线面等shp图层

    开一个帖子,等有时间了写写如何用shapelib创建点线面等shp图层  C#操作shapelib的实例 http://files.cnblogs.com/yuxuetaoxp/Shapelib--D ...

随机推荐

  1. Android 免Root实现Apk静默安装,覆盖兼容市场主流的98%的机型

    地址:http://blog.csdn.net/sk719887916/article/details/46746991 作者: skay 最近在做apk自我静默更新,在获取内置情况下,或者已root ...

  2. mysql进阶(十)不靠谱的FLOAT数据类型

    今天在设计数据表时,突然发现原来FLOAT原来是很不靠谱的,所以在这里建议大家换成DOUBLE类型, 原因是: 在mysql手册中讲到,在MySQL中的所有计算都是使用双精度完成的,使用float(单 ...

  3. Android平台根目录文件

    > 系统分区 # adb shell # mount rootfs / rootfs ro 0 0 tmpfs /dev tmpfs rw,mode=755 0 0 devpts /dev/pt ...

  4. saiku显示不出新的cube(加载的cube,saiku会保存到缓存中,不重新加载)

    当用workbench 修改cube后,保存到saiku路径. saiku读取该cube时,如果以前加载过该cube(同路径,同名).则不会新加载,而是用缓存中的cube,这个cube是以前的cube ...

  5. Gradle 1.12用户指南翻译——第二十九章. Checkstyle 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  6. Chrome浏览器开发调试系列(一)

    // 计划写一个 Chrome 浏览器以及 调试器的系列文章,我慢慢写. 边写边改,发觉博客真是个打草稿的好地方. // 本文针对的是当前最新的浏览器Chrome34,如果你的版本不够新,希望你能够更 ...

  7. dos2unix(windows脚本文件放到unix下运行要注意)

    在windows下编写的shell脚本文件,直接放到linux下运行,是不行的. infiniDB的倒库脚本文件load.sh,将tbl文件导入infiniDB,怎么运行不成功,不建job.运来,是w ...

  8. Git与远程reposiory的相关命令

    问题1:Git如何同步远程repository的分支(branch) 某天,小C同学问我,为啥VV.git仓库里面本来已经删除了branchA这个分支,但是我的mirror中还是有这个分支呢? 分析: ...

  9. android 自定义gallerey并实现预览功能

    自从Gallery被谷歌废弃以后,Google推荐使用ViewPager和HorizontalScrollView来实现Gallery的效果.的确HorizontalScrollView可以实现Gal ...

  10. iOS在GitHub Top 前100 简介

    主要对当前 GitHub 排名前 100 的项目做一个简单的简介, 方便初学者快速了解到当前 Objective-C 在 GitHub 的情况. 项目名称 项目信息 1. AFNetworking 作 ...