ArcEngine 数据导出Shape的几种方式

ArcEngine 数据导出Shape的几种方式

 

这里志列出关键代码,该代码不是

方法一:创建一个shape要素类,结果与导出要素类一致,保存使用store速度最慢,忽略

 

方法二:使用IFeatureBuffer速度较快,缺点:数据量大,导出的时候容易报内存损坏错误使程序崩溃,把arcgis lisence服务重启几次后有时能导出成功不会崩溃,没找到原因,如有解决方案,请告知,谢谢

private static void ExportShapeLayer(string filePath, IFeatureLayer featureLayer)

{

string parentPath = filePath.Substring(0, filePath.LastIndexOf('\\'));

string fcName = filePath.Substring(filePath.LastIndexOf('\\') + 1, filePath.Length - filePath.LastIndexOf('\\') - 1);

 

string filedir = parentPath.Substring(parentPath.LastIndexOf('\\') + 1, parentPath.Length - parentPath.LastIndexOf('\\') - 1);

DirectoryInfo directoryInfoPath = Directory.GetParent(parentPath);

 

IWorkspaceFactory pWorkSpaceFac = new ShapefileWorkspaceFactoryClass();

IFeatureWorkspace pFeatureWorkSpace = pWorkSpaceFac.OpenFromFile(parentPath, 0) as IFeatureWorkspace;

 

//创建字段集2

IFeatureClassDescription fcDescription = new FeatureClassDescriptionClass();

IObjectClassDescription ocDescription = (IObjectClassDescription)fcDescription;//创建必要字段

IFields fields = ocDescription.RequiredFields;

 

int shapeFieldIndex = fields.FindField(fcDescription.ShapeFieldName);

IField field = fields.get_Field(shapeFieldIndex);

IGeometryDef geometryDef = field.GeometryDef;

IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;

 

if (featureLayer.FeatureClass.ShapeType == ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon)

{

geometryDefEdit.GeometryType_2 = ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon;

}

else if (featureLayer.FeatureClass.ShapeType == ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline)

{

geometryDefEdit.GeometryType_2 = ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline;

}

else if (featureLayer.FeatureClass.ShapeType == ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint)

{

geometryDefEdit.GeometryType_2 = ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint;

}

 

ESRI.ArcGIS.Geometry.IProjectedCoordinateSystem tProjectedCoordinateSystem = ((featureLayer as IGeoDataset).SpatialReference) as ESRI.ArcGIS.Geometry.IProjectedCoordinateSystem;

geometryDefEdit.SpatialReference_2 = tProjectedCoordinateSystem;

 

IFieldChecker fieldChecker = new FieldCheckerClass();

IEnumFieldError enumFieldError = null;

IFields validatedFields = null; //将传入字段 转成 validatedFields

fieldChecker.ValidateWorkspace = (IWorkspace)pFeatureWorkSpace;

fieldChecker.Validate(fields, out enumFieldError, out validatedFields);

IFeatureClass shpFeatureClass = pFeatureWorkSpace.CreateFeatureClass(fcName, validatedFields, ocDescription.InstanceCLSID, ocDescription.ClassExtensionCLSID, esriFeatureType.esriFTSimple, fcDescription.ShapeFieldName, "");

 

for (int i = 0; i < featureLayer.FeatureClass.Fields.FieldCount; i++)

{

IField tfield = featureLayer.FeatureClass.Fields.get_Field(i);

if (tfield.Type == esriFieldType

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值