问题描述:如题
(1)要素转线(gp工具)
private bool FeatureToPolyline(string inputFile,string outputFile)
{
bool result = true;
ESRI.ArcGIS.DataManagementTools.FeatureToLine featureToLine = new ESRI.ArcGIS.DataManagementTools.FeatureToLine();
featureToLine.in_features = inputFile;
featureToLine.out_feature_class = outputFile;
Geoprocessor geoProcessor = new Geoprocessor();
try
{
geoProcessor.Execute(featureToLine, null);
}
catch (Exception ex)
{
result = false;
}
return result;
}
(1.1)面转线,非GP工具 (获取面边界,转线)
/// <summary>
/// 面转线 非GP
/// </summary>
/// <param name="in_features"></param>
/// <param name="update_features"></param>
/// <param name="out_feature_class"></param>
/// <returns></returns>
private IFeatureClass FeatureToPolygon(IFeatureClass in_features)
{
var fc = in_features;
var geoDataset = fc as IGeoDataset;
var featureClass = CreateTempFeatureClass(geoDataset.SpatialReference);//生成临时featureClass
var featureCursor = fc.Search(null, false);
var feature = featureCursor.NextFeature();
while (feature != null)
{
var newfeature = featureClass.CreateFeature();
var geometry = feature.Shape;
var pTopologBoundary = geometry as ITopologicalOperator;
var pGeometry = pTopologBoundary.Boundary;
newfeature.Shape = pGeometry;
newfeature.Store();
feature = featureCursor.NextFeature();
}
var aaa = featureClass.FeatureCount(null);
return featureClass;
}
//生成临时featureClass
public IFeatureClass CreateTempFeatureClass(ISpatialReference pSpatialReference)
{
//在内存中创建工作空间
const string strShapeFieldName = "shape";
InMemoryWorkspaceFactory pMWF = new InMemoryWorkspaceFactoryClass();
var pWName = pMWF.Create("", "MyWorkspace", null, 0);
var pWorkSpace = (IWorkspace) ((IName) pWName).Open();
var pFW = (IFeatureWorkspace) pWorkSpace;
//设置字段集
IFields pFields = new FieldsClass();
var pFieldsEdit = (IFieldsEdit) pFields;
//设置字段
IField pField = new FieldClass();
var pFieldEdit = (IFieldEdit) pField;
//创建类型为几何类型的shape字段(必须)
pFieldEdit.Name_2 = strShapeFieldName;
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
//为esriFieldTypeGeometry类型的字段创建几何定义,包括类型和空间参照
IGeometryDef pGeoDef = new GeometryDefClass();
var pGeoDefEdit = (IGeometryDefEdit) pGeoDef;
pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline;
pGeoDefEdit.SpatialReference_2 = pSpatialReference;
pFieldEdit.GeometryDef_2 = pGeoDef;
pFieldsEdit.AddField(pField);
//添加ID字段
pField = new FieldClass();
pFieldEdit = (IFieldEdit) pField;
pFieldEdit.Name_2 = "OBJECTID";
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeOID;
pFieldsEdit.AddField(pField);
添加StationName字段
//pField = new FieldClass();
//pFieldEdit = (IFieldEdit)pField;
//pFieldEdit.Name_2 = "StationNM";
//pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
//pFieldsEdit.AddField(pField);
//pField = new FieldClass();
//pFieldEdit = (IFieldEdit)pField;
//pFieldEdit.Name_2 = "STCD";
//pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
//pFieldsEdit.AddField(pField);
//pField = new FieldClass();
//pFieldEdit = (IFieldEdit)pField;
//pFieldEdit.Name_2 = "DYP";
//pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
//pFieldsEdit.AddField(pField);
//创建shapefile
var pFC = pFW.CreateFeatureClass("Temp", pFields, null, null, esriFeatureType.esriFTSimple,
strShapeFieldName, ""); //在内存中创建临时的shape文件
return pFC;
}
(2)计算多边形面积 (计算面积)
/// <summary>
/// 计算多边形面积
/// </summary>
/// <param name="inputPath"></param>
/// <param name="outputPath"></param>
public bool CalculateAreas(string inputPath,string outputFileName)
{
bool result = true;
Geoprocessor GP = new Geoprocessor();
CalculateAreas calculate =new CalculateAreas();
calculate.Input_Feature_Class = _outfilepath;
calculate.Output_Feature_Class = outputFileName;
try
{
GP.Execute(calculate, null);
}
catch (Exception ex)
{
writeLog(" gp工具执行错误:" + ex.Message);
result = false;
}
return result;
}
(3)交集取反,gp工具
/// <summary>
/// 交集取反
/// </summary>
/// <param name="in_features"></param>
/// <param name="update_features"></param>
/// <param name="out_feature_class"></param>
/// <returns></returns>
private bool SymDiff(IFeatureClass in_features, string update_features, string out_feature_class)
{
var result = true;
var symDiff = new SymDiff();
symDiff.in_features = in_features;
symDiff.update_features = update_features;
symDiff.out_feature_class = out_feature_class;
var geoProcessor = new Geoprocessor();
geoProcessor.OverwriteOutput = true;
try
{
geoProcessor.Execute(symDiff, null);
}
catch (Exception ex)
{
result = false;
writeLog(" 交集取反gp工具执行错误:" + ex.Message);
}
return result;
}