`
devgis
  • 浏览: 138284 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

C#+ArcGIS Engine 中创建Shp点图层

 
阅读更多

if (lblFilePath.Text.Trim() == "")// '检查保存路径不为空
{
MessageBox.Show("请选择保存路径");
return;
}
if (TxtSaveName.Text.Trim() == "")// '检查文件名不为空
{
MessageBox.Show("请选择保存图层名");
return;
}

//指定目录,如果存在则删除
//ISpatialReference pSpatialReference = _frmMain.pCurrentMap.ActiveView.FocusMap.SpatialReference;

string strShapeFolder = lblFilePath.Text;
string strShapeFile = TxtSaveName.Text.Trim() + ".shp";


FileInfo fFile = new FileInfo(strShapeFolder + @"\" + TxtSaveName.Text.Trim() + ".shp");
//是否重命名
if (fFile.Exists)
{

DialogResult r2 = MessageBox.Show("此文件名已经存在,要覆盖吗?", "返回值 是6 否7", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (r2 == System.Windows.Forms.DialogResult.Yes) //取消关闭
{
DirectoryInfo fold = new DirectoryInfo(strShapeFolder);
FileInfo[] files = fold.GetFiles(TxtSaveName.Text.Trim() + ".*");
foreach (FileInfo f in files)
{
f.Delete();
}
}
else
{
TxtSaveName.Focus();
return;
}
}

string shapeFileFullName = strShapeFolder + strShapeFile;
IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();
IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(strShapeFolder, 0);
IFeatureClass pFeatureClass;
if (File.Exists(shapeFileFullName))
{
pFeatureClass = pFeatureWorkspace.OpenFeatureClass(strShapeFile);
IDataset pDataset = (IDataset)pFeatureClass;
pDataset.Delete();
}

//设置字段
int i;
double tmpLongitude;
double tmplatitude;
IPoint pPoint;

IFields pFields = new FieldsClass();
IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields;

IField pField = new FieldClass();
IFieldEdit pFieldEdit = (IFieldEdit)pField;

ISpatialReferenceFactory spatialReferenceFactory = new SpatialReferenceEnvironment();
IGeographicCoordinateSystem pGCS;
pGCS = spatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);

pFieldEdit.Name_2 = "SHAPE";
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;

IGeometryDefEdit pGeoDef = new GeometryDefClass();
IGeometryDefEdit pGeoDefEdit = (IGeometryDefEdit)pGeoDef;
pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;
pGeoDefEdit.SpatialReference_2 = pGCS; //new UnknownCoordinateSystemClass();
pFieldEdit.GeometryDef_2 = pGeoDef;
pFieldsEdit.AddField(pField);


pField = new FieldClass();
pFieldEdit = (IFieldEdit)pField;
pFieldEdit.Name_2 = "经度";
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
pFieldsEdit.AddField(pField);

pField = new FieldClass();
pFieldEdit = (IFieldEdit)pField;
pFieldEdit.Name_2 = "纬度";
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
pFieldsEdit.AddField(pField);

pField = new FieldClass();
pFieldEdit = (IFieldEdit)pField;
pFieldEdit.Name_2 = "地点";
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
pFieldEdit.Length_2 = 30;
pFieldsEdit.AddField(pField);

pField = new FieldClass();
pFieldEdit = (IFieldEdit)pField;
pFieldEdit.Name_2 = "炮型";
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
pFieldEdit.Length_2 = 30;
pFieldsEdit.AddField(pField);

pField = new FieldClass();
pFieldEdit = (IFieldEdit)pField;
pFieldEdit.Name_2 = "高程";
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
pFieldsEdit.AddField(pField);

//创建shp
pFeatureClass = pFeatureWorkspace.CreateFeatureClass(strShapeFile, pFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", "");

//进度条
dlgReadProgress newprogress = new dlgReadProgress();
{
newprogress.Label1.Text = "正在生成shp文件,请稍候。。。";
newprogress.ProgressBar.Maximum = gvwPoint.SelectedRows.Count;
newprogress.ProgressBar.Step = 1;
}

for (i = 0; i < gvwPoint.SelectedRows.Count; i++)
{
tmpLongitude = Convert.ToDouble(gvwPoint.SelectedRows[i].Cells[3].Value.ToString().Trim());
tmpLongitude += Convert.ToDouble(gvwPoint.SelectedRows[i].Cells[4].Value.ToString().Trim()) / 60.0;
tmpLongitude += Convert.ToDouble(gvwPoint.SelectedRows[i].Cells[5].Value.ToString().Trim()) / 3600.0;

tmplatitude = Convert.ToDouble(gvwPoint.SelectedRows[i].Cells[6].Value.ToString().Trim());
tmplatitude += Convert.ToDouble(gvwPoint.SelectedRows[i].Cells[7].Value.ToString().Trim()) / 60.0;
tmplatitude += Convert.ToDouble(gvwPoint.SelectedRows[i].Cells[8].Value.ToString().Trim()) / 3600.0;

pPoint = new PointClass();
pPoint.X = tmpLongitude;
pPoint.Y = tmplatitude;
IFeature pFeature = pFeatureClass.CreateFeature();
pFeature.Shape = pPoint;
pFeature.set_Value(pFeature.Fields.FindField("经度"), tmpLongitude.ToString("F4"));
pFeature.set_Value(pFeature.Fields.FindField("纬度"), tmplatitude.ToString("F4"));
pFeature.set_Value(pFeature.Fields.FindField("地点"), gvwPoint.SelectedRows[i].Cells[2].Value);
pFeature.set_Value(pFeature.Fields.FindField("炮型"), gvwPoint.SelectedRows[i].Cells[11].Value);
pFeature.set_Value(pFeature.Fields.FindField("高程"), gvwPoint.SelectedRows[i].Cells[9].Value);
pFeature.Store();

newprogress.ProgressBar.PerformStep();
newprogress.Show();
newprogress.Refresh();
}
newprogress.Close();

DialogResult r1 = MessageBox.Show("是否加载当前图层?", "返回值 是6 否7", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (r1 == DialogResult.Yes)
{
IFeatureLayer pFeaturelayer = new FeatureLayerClass();
pFeaturelayer.FeatureClass = pFeatureClass;
pFeaturelayer.Name = "layer";

_frmMain.pCurrentMap.AddLayer(pFeaturelayer);
}

分享到:
评论

相关推荐

    C#+ArcGISEngine进行图层的添加要素的添加

    本文将深入探讨如何使用C#语言结合ArcGISEngine来实现图层的添加以及要素的添加功能,这是一项对于GIS开发至关重要的技术。 首先,我们需要了解ArcGIS Engine的基本概念。ArcGIS Engine是Esri公司提供的一个开发...

    Arcgis Engine 添加shp.lyr图层,删除图层,移动图层,更改图例符号,属性查询,鹰眼

    本篇将详细介绍如何利用ArcGIS Engine进行图层操作,包括添加shp.lyr图层、删除图层、移动图层、更改图例符号、属性查询以及实现鹰眼(Zoom to Extent)功能。 1. **添加shp.lyr图层** 在ArcGIS Engine中,我们...

    C#+ArcEngine:加载打开Shp矢量和栅格数据

    在GIS(地理信息系统)开发中,C#与Esri的ArcEngine结合使用,可以实现对各种地理数据的处理和分析。本主题将深入探讨如何利用C#编程语言和ArcEngine API来加载和打开两种常见的地理数据格式:Shapefile(矢量数据)...

    简易桌面版地理信息系统(c# + ArcGIS Engine开发)

    ①*mxd文档和*shp矢量图层等数据文件的加载和保存、 ②放大缩小等视图操作、③SQL查询和空间查询、 ④空间分析和叠置分析、⑤网络分析、⑥三维分析、 ⑦鹰眼地图等。 开发版本信息:ArcGIS Engine 10.1

    arcengine动态创建shp图层

    总之,ArcEngine动态创建SHP图层涉及到GIS数据结构的理解、ArcEngine API的熟练应用以及数据处理和文件操作。通过以上步骤,你可以构建一个功能强大的工具,不仅能够动态创建点图层,还能根据文本数据批量赋值属性,...

    ArcGIS_Engine_VS2010_C#添加图层

    ### ArcGIS Engine 在 VS2010 中使用 C# 添加图层 #### 一、概述 在GIS领域,ArcGIS Engine 是一款强大的地理信息系统开发工具,它提供了丰富的API供开发者进行二次开发。本文将详细介绍如何在Visual Studio 2010...

    C# +AE加载shp、栅格、地图文档数据

    在C#中,通过ArcGIS Engine SDK,可以利用`ShapefileWorkspaceFactory`类来打开并访问.shp文件。代码片段中首先创建了一个`OpenFileDialog`对象,允许用户选择特定类型的文件。如果用户选择了.shp文件,程序会调用`...

    C#+arcgis 经典示例 常见问题

    "C#+arcgis 经典示例 常见问题"这个主题,涉及到的是如何使用C#来操作和处理ArcGIS中的数据,尤其是Shp文件,这是一种常见的地理空间数据格式。 Shp文件是ESRI公司的Shapefile格式,通常用来存储地理要素如点、线、...

    arcgis engine新建图层添加坐标系(地理坐标系、投影坐标系)

    包含打开地图,添加shp图层,保存地图的代码。关键是新建shp时用户自有选择地理坐标系和投影坐标系。坐标系的选择是通过prj文件来创建空间参考,因此本代码还带了arcgis坐标系的所有prj文件,方便选择坐标系。

    C#+AE实现PersonalGeodatabase和shp文件入库

    本主题将深入探讨如何利用C#与ArcObjects(AE,ArcGIS Engine)来实现对Personal Geodatabase的连接以及将shp文件入库的过程。 Personal Geodatabase是由Esri开发的一种基于Microsoft Access的轻量级地理数据库,...

    Arcengine开发,直接操作shp,并裁剪

    在ArcEngine中,我们不通过创建图层来直接操作shp文件,而是利用其提供的API接口,对数据进行更底层的操作,这样可以提高效率并实现更为复杂的功能。 首先,我们需要导入ArcGIS Engine的相关库,例如`ESRI.ArcGIS....

    ArcGIS Engine 实现简单的投影转换

    在ArcGIS Engine中,`Geoprocessor`类是执行地理处理任务的核心类,它可以用来执行一系列的地理处理操作,如投影转换、裁剪、缓冲区创建等。下面我们将详细介绍如何利用`Geoprocessor`类完成投影转换的任务。 ### ...

    ArcgisEngine开发空间分析:包括交集取反,擦除操作

    在GIS(地理信息系统)开发领域,ArcGIS Engine(简称AE)是一个强大的开发工具,它允许开发者构建具有专业GIS功能的应用程序。本主题将深入探讨如何使用ArcGIS Engine进行空间分析,特别是交集取反和擦除操作。这些...

    vs2010c#的arcengine按属性选择,并把选择的记录导出新shp,可以批量

    在本文中,我们将深入探讨如何使用C#编程语言与ArcEngine进行交互,实现基于属性的查询功能,并将查询结果导出为新的Shapefile(shp)格式,支持批量操作。ArcEngine是由Esri公司开发的一个强大的GIS开发工具,它...

    shiyan.zip_ArcGIS Engine二次开发_arcgis engine

    1. **mytest1**:这可能是用ArcGIS Engine开发的一个示例程序,它展示了如何在C#、VB.NET或其他支持的语言中进行基本的GIS操作,如加载地图、添加图层、执行查询等。通过研究这个程序,我们可以学习到如何创建地图...

    ArcGis9.2 ArcGIS Engine+C#实例开发教程.pdf

    ### ArcGIS Engine+C# 实例开发教程知识点梳理 #### 一、桌面GIS应用程序框架的建立 **1. 新建项目** - **环境准备**: 使用Visual Studio 2005进行项目开发。 - **项目类型**: 在项目类型中选择Visual C#下的...

    C# + AE 开发代码

    本段代码展示了如何在C#中利用ArcGIS Engine进行GIS数据(包括矢量数据和图像数据)的读取和展示。通过对关键类和方法的调用,实现了数据的加载和图层的动态构建,为开发GIS应用提供了基础框架。理解这些核心概念...

    arcgis中将坐标点或者点文件转换成线、面文件

    在 ArcGIS 中,将坐标点或者点文件转换成线、面文件是一个常见的操作。下面,我们将详细介绍如何实现这一操作。 Step 1: 数据准备 首先,我们需要将坐标点或者点文件导入到 Excel 里面,总共有两列 X,Y(列名可以...

Global site tag (gtag.js) - Google Analytics