/***************************
Write by Chn gzGISer Tst
CSDN blog Ricardo.M.Tan
**************************/
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.GeoDatabaseUI;
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace Chn.SpatialDataProcessing.GeoDataHelper.Processing {
/// <summary>
/// 非gp工具导出
/// </summary>
public class GeoDataExport {
/// <summary>
/// 非gp工具导出
/// </summary>
public GeoDataExport() {
}
/// <summary>
/// 使用IExportOperation导出数据为Shapefile
/// </summary>
/// <param name="featureLayer">要导出的要素图层</param>
/// <param name="outputWorkspace">导出的数据所在的工作空间</param>
public void Export(IFeatureLayer featureLayer, IWorkspace outputWorkspace) {
try {
if (featureLayer == null) {
throw new Exception("空图层引用");
}
// Get ISelectionSet
IFeatureSelection pSelection = featureLayer as IFeatureSelection;
ISelectionSet pSelectionSet = pSelection.SelectionSet;
if (pSelectionSet.Count == 0) {
return;
}
// Get IFeatureClassName
IDataset outputDataset = outputWorkspace as IDataset;
IWorkspaceName outputWorkspaceName = outputDataset.FullName as IWorkspaceName;
IFeatureClassName outputFeatureClassName = new FeatureClassNameClass();
IDatasetName datasetName = outputFeatureClassName as IDatasetName;
datasetName.WorkspaceName = outputWorkspaceName;
string fileName = featureLayer.Name + "_Export_" + DateTime.Now.ToString("yyyyMMddHHmmss");//用时间戳替代检测文件已存在方案
datasetName.Name = fileName;
IExportOperation exportOperation = new ExportOperationClass();
// Get IDatasetName
IFeatureClass pFeatureClass = featureLayer.FeatureClass;
IDataset inputDataset = pFeatureClass as IDataset;
IDatasetName inputDatasetName = inputDataset.FullName as IDatasetName;
// Get IGeometryDef
string shapeFieldName = pFeatureClass.ShapeFieldName;
int shapeFieldIndex = pFeatureClass.FindField(shapeFieldName);
IField shapeField = pFeatureClass.Fields.get_Field(shapeFieldIndex);
// Get the geometry definition from the shape field and clone it.
IGeometryDef geometryDef = shapeField.GeometryDef;
IClone geometryDefClone = (IClone)geometryDef;
IClone targetGeometryDefClone = geometryDefClone.Clone();
IGeometryDef inputGeometryDef = (IGeometryDef)targetGeometryDefClone;
// Get IQueryFilter
IQueryFilter pQueryFilter = new QueryFilterClass() {
WhereClause = ""
};
exportOperation.ExportFeatureClass(inputDatasetName, pQueryFilter, pSelectionSet, inputGeometryDef, outputFeatureClassName, 0);
} catch{
throw;
}
}
/// <summary>
/// 使用IExportOperation导出数据为Shapefile
/// </summary>
/// <param name="featureLayer">要导出的要素图层</param>
/// <param name="outputWorkspace">导出的数据所在的工作空间</param>
public void ExportLayer(IFeatureLayer featureLayer, IWorkspace outputWorkspace) {
try {
if (featureLayer == null) {
throw new Exception("空图层引用");
}
// Get ISelectionSet
//IFeatureSelection pSelection = featureLayer as IFeatureSelection;
//ISelectionSet pSelectionSet = pSelection.SelectionSet;
// Get IFeatureClassName
IDataset outputDataset = outputWorkspace as IDataset;
IWorkspaceName outputWorkspaceName = outputDataset.FullName as IWorkspaceName;
IFeatureClassName outputFeatureClassName = new FeatureClassNameClass();
IDatasetName datasetName = outputFeatureClassName as IDatasetName;
datasetName.WorkspaceName = outputWorkspaceName;
string fileName = featureLayer.Name + "_Export_" + DateTime.Now.ToString("yyyyMMddHHmmss");//用时间戳替代检测文件已存在方案
datasetName.Name = fileName;
IExportOperation exportOperation = new ExportOperationClass();
// Get IDatasetName
IFeatureClass pFeatureClass = featureLayer.FeatureClass;
IDataset inputDataset = pFeatureClass as IDataset;
IDatasetName inputDatasetName = inputDataset.FullName as IDatasetName;
// Get IGeometryDef
string shapeFieldName = pFeatureClass.ShapeFieldName;
int shapeFieldIndex = pFeatureClass.FindField(shapeFieldName);
IField shapeField = pFeatureClass.Fields.get_Field(shapeFieldIndex);
// Get the geometry definition from the shape field and clone it.
IGeometryDef geometryDef = shapeField.GeometryDef;
IClone geometryDefClone = (IClone)geometryDef;
IClone targetGeometryDefClone = geometryDefClone.Clone();
IGeometryDef inputGeometryDef = (IGeometryDef)targetGeometryDefClone;
// Get IQueryFilter
IQueryFilter pQueryFilter = new QueryFilterClass() {
WhereClause = ""
};
exportOperation.ExportFeatureClass(inputDatasetName, pQueryFilter, null, inputGeometryDef, outputFeatureClassName, 0);
} catch {
throw;
}
}
/// <summary>
/// 使用IExportOperation导出数据为Shapefile,导出所选中的
/// </summary>
/// <param name="featureLayer">要导出的要素图层</param>
/// <param name="outputWorkspace">导出的数据所在的工作空间</param>
/// <param name="messageBaseModel">执行过程中产生的信息</param>
public void ExportNew(IFeatureLayer featureLayer, IWorkspace outputWorkspace) {
try {
if (featureLayer == null) {
return;
}
// Get ISelectionSet
IFeatureSelection pSelection = featureLayer as IFeatureSelection;
ISelectionSet pSelectionSet = pSelection.SelectionSet;
if (pSelectionSet.Count == 0) {
return;
}
// Get IFeatureClassName
IDataset outputDataset = outputWorkspace as IDataset;
IWorkspaceName outputWorkspaceName = outputDataset.FullName as IWorkspaceName;
IFeatureClassName outputFeatureClassName = new FeatureClassNameClass();
IDatasetName datasetName = outputFeatureClassName as IDatasetName;
datasetName.WorkspaceName = outputWorkspaceName;
string fileName = featureLayer.Name + "_Export_" + DateTime.Now.ToString("yyyyMMddHHmmss");//用时间戳替代检测文件已存在方案
datasetName.Name = fileName;
IExportOperation exportOperation = new ExportOperationClass();
// Get IDatasetName
IFeatureClass pFeatureClass = featureLayer.FeatureClass;
IDataset inputDataset = pFeatureClass as IDataset;
IDatasetName inputDatasetName = inputDataset.FullName as IDatasetName;
// Get IGeometryDef
string shapeFieldName = pFeatureClass.ShapeFieldName;
int shapeFieldIndex = pFeatureClass.FindField(shapeFieldName);
IField shapeField = pFeatureClass.Fields.get_Field(shapeFieldIndex);
// Get the geometry definition from the shape field and clone it.
IGeometryDef geometryDef = shapeField.GeometryDef;
IClone geometryDefClone = (IClone)geometryDef;
IClone targetGeometryDefClone = geometryDefClone.Clone();
IGeometryDef inputGeometryDef = (IGeometryDef)targetGeometryDefClone;
// Get IQueryFilter
IQueryFilter pQueryFilter = new QueryFilterClass() {
WhereClause = ""
};
exportOperation.ExportFeatureClass(inputDatasetName, pQueryFilter, pSelectionSet, inputGeometryDef, outputFeatureClassName, 0);
} catch (Exception ex) {
return null;
}
}
}
}