//删除要素重叠节点
public bool DelOverlapVertex(IWorkspace workspace, string strTable, IProgressor progressor)
{
bool result;
try
{
IWorkspaceEdit workspaceEdit = null;
IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;
IFeatureClass featureClass = featureWorkspace.OpenFeatureClass(strTable);
switch (featureClass.ShapeType)
{
case 3:
this.DelLineOverlapVertex(featureClass, progressor);
break;
case 4:
this.DelAreaOverlapVertex(featureClass, progressor);
break;
default:
MessageBox.Show("删除多余节点,不支持的要素类型");
break;
}
if (workspaceEdit != null)
{
workspaceEdit.StopEditOperation();
workspaceEdit.StopEditing(true);
ComReleaser.ReleaseCOMObject(workspaceEdit);
}
return true;
}
catch (Exception ex)
{
Trace.WriteLine(ex.Message);
result = false;
}
return result;
}
///删除面要素重复节点
public string DelAreaOverlapVertex(IFeatureClass featureClass, IProgressor progressor)
{
progressor.Message = "删除重叠节点";
featureClass.FeatureCount(null);
StringBuilder stringBuilder = new StringBuilder();
IFeatureCursor featureCursor = featureClass.Search(null, true);
int num = featureCursor.FindField("OBJECTID");
for (IFeature feature = featureCursor.NextFeature(); feature != null; feature = featureCursor.NextFeature())
{
progressor.Step();
int num2 = (int)feature.get_Value(num);
IPolygon4 polygon = feature.ShapeCopy as IPolygon4;
IGeometryBag exteriorRingBag = polygon.ExteriorRingBag;
IEnumGeometry enumGeometry = exteriorRingBag as IEnumGeometry;
enumGeometry.Reset();
int num3 = -1;
for (IRing ring = enumGeometry.Next() as IRing; ring != null; ring = (enumGeometry.Next() as IRing))
{
IGeometryBag geometryBag = polygon.get_InteriorRingBag(ring);
int num4 = polygon.get_InteriorRingCount(ring);
IEnumGeometry enumGeometry2 = geometryBag as IEnumGeometry;
enumGeometry2.Reset();
bool flag = false;
for (;;)
{
ISegmentCollection segmentCollection;
if (flag)
{
if (num4 == 0)
{
break;
}
IRing ring2 = enumGeometry2.Next() as IRing;
if (ring2 == null)
{
break;
}
num3++;
segmentCollection = (ring2 as ISegmentCollection);
}
else
{
num3++;
segmentCollection = (ring as ISegmentCollection);
}
IPointCollection pointCollection = segmentCollection as IPointCollection;
IPoint point = pointCollection.get_Point(0);
for (int i = 1; i < pointCollection.PointCount; i++)
{
IPoint point2 = pointCollection.get_Point(i);
double num5 = Math.Sqrt(Math.Pow(point2.X - point.X, 2.0) + Math.Pow(point2.Y - point.Y, 2.0));
if (num5 <= 0.001)
{
pointCollection.RemovePoints(i, 1);
stringBuilder.AppendLine(string.Concat(new object[]
{
num2,
"号图形part",
num3,
"删除了第",
i,
"个节点。"
}));
i--;
}
else
{
point = point2;
}
}
polygon.SimplifyPreserveFromTo();
flag = true;
}
}
feature.Shape = polygon;
feature.Store();
}
ComReleaser.ReleaseCOMObject(featureCursor);
return stringBuilder.ToString();
}
///删除线重叠节点
public string DelLineOverlapVertex(IFeatureClass featureClass, IProgressor progressor)
{
progressor.Message = "删除重叠节点";
featureClass.FeatureCount(null);
StringBuilder stringBuilder = new StringBuilder();
IFeatureCursor featureCursor = featureClass.Search(null, true);
int num = featureCursor.FindField("OBJECTID");
int num2 = 0;
for (IFeature feature = featureCursor.NextFeature(); feature != null; feature = featureCursor.NextFeature())
{
progressor.Step();
int num3 = (int)feature.get_Value(num);
IPolyline4 polyline = feature.ShapeCopy as IPolyline4;
polyline.SimplifyNetwork();
IPointCollection pointCollection = polyline as IPointCollection;
IPoint point = pointCollection.get_Point(0);
for (int i = 1; i < pointCollection.PointCount; i++)
{
IPoint point2 = pointCollection.get_Point(i);
double num4 = Math.Sqrt(Math.Pow(point2.X - point.X, 2.0) + Math.Pow(point2.Y - point.Y, 2.0));
if (num4 <= 0.001)
{
pointCollection.RemovePoints(i, 1);
stringBuilder.AppendLine(string.Concat(new object[]
{
num3,
"号图形删除了第",
i,
"个节点。"
}));
i--;
num2++;
}
else
{
point = point2;
}
}
polyline.SimplifyNetwork();
feature.Shape = polyline;
feature.Store();
}
ComReleaser.ReleaseCOMObject(featureCursor);
stringBuilder.AppendLine("共有" + num2.ToString() + "个节点被删除");
return stringBuilder.ToString();
}
ArcEngine 删除线、面重叠节点
最新推荐文章于 2023-01-03 01:30:00 发布