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来实现图层的添加以及要素的添加功能,这是一项对于GIS开发至关重要的技术。 首先,我们需要了解ArcGIS Engine的基本概念。ArcGIS Engine是Esri公司提供的一个开发...
本篇将详细介绍如何利用ArcGIS Engine进行图层操作,包括添加shp.lyr图层、删除图层、移动图层、更改图例符号、属性查询以及实现鹰眼(Zoom to Extent)功能。 1. **添加shp.lyr图层** 在ArcGIS Engine中,我们...
在GIS(地理信息系统)开发中,C#与Esri的ArcEngine结合使用,可以实现对各种地理数据的处理和分析。本主题将深入探讨如何利用C#编程语言和ArcEngine API来加载和打开两种常见的地理数据格式:Shapefile(矢量数据)...
①*mxd文档和*shp矢量图层等数据文件的加载和保存、 ②放大缩小等视图操作、③SQL查询和空间查询、 ④空间分析和叠置分析、⑤网络分析、⑥三维分析、 ⑦鹰眼地图等。 开发版本信息:ArcGIS Engine 10.1
总之,ArcEngine动态创建SHP图层涉及到GIS数据结构的理解、ArcEngine API的熟练应用以及数据处理和文件操作。通过以上步骤,你可以构建一个功能强大的工具,不仅能够动态创建点图层,还能根据文本数据批量赋值属性,...
### ArcGIS Engine 在 VS2010 中使用 C# 添加图层 #### 一、概述 在GIS领域,ArcGIS Engine 是一款强大的地理信息系统开发工具,它提供了丰富的API供开发者进行二次开发。本文将详细介绍如何在Visual Studio 2010...
在C#中,通过ArcGIS Engine SDK,可以利用`ShapefileWorkspaceFactory`类来打开并访问.shp文件。代码片段中首先创建了一个`OpenFileDialog`对象,允许用户选择特定类型的文件。如果用户选择了.shp文件,程序会调用`...
"C#+arcgis 经典示例 常见问题"这个主题,涉及到的是如何使用C#来操作和处理ArcGIS中的数据,尤其是Shp文件,这是一种常见的地理空间数据格式。 Shp文件是ESRI公司的Shapefile格式,通常用来存储地理要素如点、线、...
包含打开地图,添加shp图层,保存地图的代码。关键是新建shp时用户自有选择地理坐标系和投影坐标系。坐标系的选择是通过prj文件来创建空间参考,因此本代码还带了arcgis坐标系的所有prj文件,方便选择坐标系。
本主题将深入探讨如何利用C#与ArcObjects(AE,ArcGIS Engine)来实现对Personal Geodatabase的连接以及将shp文件入库的过程。 Personal Geodatabase是由Esri开发的一种基于Microsoft Access的轻量级地理数据库,...
在ArcEngine中,我们不通过创建图层来直接操作shp文件,而是利用其提供的API接口,对数据进行更底层的操作,这样可以提高效率并实现更为复杂的功能。 首先,我们需要导入ArcGIS Engine的相关库,例如`ESRI.ArcGIS....
在ArcGIS Engine中,`Geoprocessor`类是执行地理处理任务的核心类,它可以用来执行一系列的地理处理操作,如投影转换、裁剪、缓冲区创建等。下面我们将详细介绍如何利用`Geoprocessor`类完成投影转换的任务。 ### ...
在GIS(地理信息系统)开发领域,ArcGIS Engine(简称AE)是一个强大的开发工具,它允许开发者构建具有专业GIS功能的应用程序。本主题将深入探讨如何使用ArcGIS Engine进行空间分析,特别是交集取反和擦除操作。这些...
在本文中,我们将深入探讨如何使用C#编程语言与ArcEngine进行交互,实现基于属性的查询功能,并将查询结果导出为新的Shapefile(shp)格式,支持批量操作。ArcEngine是由Esri公司开发的一个强大的GIS开发工具,它...
1. **mytest1**:这可能是用ArcGIS Engine开发的一个示例程序,它展示了如何在C#、VB.NET或其他支持的语言中进行基本的GIS操作,如加载地图、添加图层、执行查询等。通过研究这个程序,我们可以学习到如何创建地图...
### ArcGIS Engine+C# 实例开发教程知识点梳理 #### 一、桌面GIS应用程序框架的建立 **1. 新建项目** - **环境准备**: 使用Visual Studio 2005进行项目开发。 - **项目类型**: 在项目类型中选择Visual C#下的...
本段代码展示了如何在C#中利用ArcGIS Engine进行GIS数据(包括矢量数据和图像数据)的读取和展示。通过对关键类和方法的调用,实现了数据的加载和图层的动态构建,为开发GIS应用提供了基础框架。理解这些核心概念...
在 ArcGIS 中,将坐标点或者点文件转换成线、面文件是一个常见的操作。下面,我们将详细介绍如何实现这一操作。 Step 1: 数据准备 首先,我们需要将坐标点或者点文件导入到 Excel 里面,总共有两列 X,Y(列名可以...