private bool EliminateSpot(IFeatureClass pFeatureClass,double Min)
{
try
{
List<int> dl = new List<int>();
int cout = pFeatureClass.FeatureCount(null);
IFeatureCursor pcur = pFeatureClass.Update(null, false);
IFeature pf = pcur.NextFeature();
while (pf != null)
{
IArea ar = pf.ShapeCopy as IArea;
if (ar.Area < Min)
{
dl.Add(pf.OID);
IFeature unfeature = pf;
for (int i = 0; i < cout; i++)
{
if (i == pf.OID)
continue;
IFeature listfeature = pFeatureClass.GetFeature(i);
IRelationalOperator ro = pf.ShapeCopy as IRelationalOperator;
ITopologicalOperator lt = listfeature.ShapeCopy as ITopologicalOperator;
ITopologicalOperator pt = pf.ShapeCopy as ITopologicalOperator;
IRelationalOperator rx = lt.Boundary as IRelationalOperator;
if (ro.Overlaps(listfeature.ShapeCopy))
{
IArea area = listfeature.ShapeCopy as IArea;
if (area.Area > (unfeature.ShapeCopy as IArea).Area)
unfeature = listfeature;
break;
}
else if (rx.Contains(pt.Boundary))
{
IArea area = listfeature.ShapeCopy as IArea;
if (area.Area > (unfeature.ShapeCopy as IArea).Area)
unfeature = listfeature;
break;
}
else if (rx.Overlaps(pt.Boundary))
{
IArea area = listfeature.ShapeCopy as IArea;
if (area.Area > (unfeature.ShapeCopy as IArea).Area)
unfeature = listfeature;
}
}
IGeometry bag = new GeometryBagClass();
IGeometryCollection gc = bag as IGeometryCollection;
object m1 = Type.Missing;
gc.AddGeometry(pf.ShapeCopy, ref m1, ref m1);
gc.AddGeometry(unfeature.ShapeCopy, ref m1, ref m1);
ITopologicalOperator to = new PolygonClass();
to.ConstructUnion(bag as IEnumGeometry);
unfeature.Shape = to as IGeometry;
unfeature.Store();
}
pf = pcur.NextFeature();
}
string sql = dl[0].ToString();
for (int i = 1; i < dl.Count; i++)
{
sql += "," + dl[i].ToString();
}
sql = "(" + sql + ")";
if (sql != "()")
{
IQueryFilter pQueryFilter = new QueryFilterClass();
pQueryFilter.WhereClause = "FID in" + sql;
ITable pTable = pFeatureClass as ITable;
pTable.DeleteSearchedRows(pQueryFilter);
System.Runtime.InteropServices.Marshal.ReleaseComObject(pQueryFilter);
}
return true;
}
catch
{
return false;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义