在ArcGIS中叠加操作会带来碎图斑或狭长面,而这些碎图斑或狭长面又会影响后续的判断。所以就需要消除。

例如:

具体操作有以下方式:

1、最简单的的方法就是使用ArcGIS提供的“消除工具”。在"数据管理工具"——“制图综合”——“消除”。

2、使用Python脚本

# -*-coding:gbk-*-import arcpy
from arcpy import env
import time# 融合指定条件的图斑try:source_gdb_path = "F:/GIS测试数据/测试.gdb"  # 原始图层工作空间in_features = "POLYGON"   # 输入图层expression = "SHAPE_AREA <50 or SHAPE_Area/ SHAPE_Length<0.2"  # 融合限制条件env.workspace = source_gdb_pathtime_begin = time.time()print "消除指定条件下的要素{0}".format(expression)tempLayer = "block_layer"# SearchCursorfcount = len([feature[0] for feature in arcpy.da.SearchCursor(in_features, "SHAPE_AREA", expression)])while (fcount > 0):print('fcount:{0}  Time : {1} s'.format(fcount, time.time() - time_begin))tempLayer = "{0}_b".format(tempLayer)# MakeFeatureLayerarcpy.MakeFeatureLayer_management(in_features, tempLayer)in_features = "{0}_E".format(in_features)if arcpy.Exists(in_features):arcpy.Delete_management(in_features)# SelectLayerByAttribute to define feature to be eliminatedarcpy.SelectLayerByAttribute_management(tempLayer, "NEW_SELECTION", expression)# Eliminatearcpy.Eliminate_management(tempLayer, in_features, "AREA")fcount2 = len([feature[0] for feature in arcpy.da.SearchCursor(in_features, "SHAPE_AREA", expression)])if fcount2 == fcount:breakelse:fcount = fcount2print "Total Time {0}".format(time.time() - time_begin)
except Exception, e:print e.message.decode("utf_8")

3、AE+C#实现

/// <summary>
/// 消除碎图斑
/// </summary>
/// <param name="pFeatureClass">要素类</param>
/// <param name="whereClause">消除条件:"SHAPE_AREA <50 or SHAPE_AREA/SHAPE_Length<0.2"</param>
public static void Eliminate(IFeatureClass pFeatureClass, string whereClause)
{Dictionary<int, IGeometry> dicOidsGeo = new Dictionary<int, IGeometry>();ISpatialFilter pSpatialFilter = new SpatialFilterClass { WhereClause = whereClause, SubFields = $"SHAPE,{pFeatureClass.OIDFieldName}" };IFeatureCursor pFeatureCursor = pFeatureClass.Search(pSpatialFilter, true);IFeature pFeature = null;while ((pFeature = pFeatureCursor.NextFeature()) != null){(pFeature.ShapeCopy as ITopologicalOperator).Simplify();dicOidsGeo[pFeature.OID] = pFeature.ShapeCopy;}System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor);int count = dicOidsGeo.Count;while (count > 0){Console.WriteLine($"个数:{count},时间:{DateTime.Now}");int count2 = ExcudeEliminate(dicOidsGeo, pFeatureClass);if (count2 == count)break;elsecount = count2;}
}/// <summary>
/// 消除碎图斑,融到相邻面积最大面
/// </summary>
/// <param name="dicOidsGeo">几何集合</param>
/// <param name="pFeatureClass">源要素类</param>
/// <returns>未消除的个数</returns>
public static int ExcudeEliminate(Dictionary<int, IGeometry> dicOidsGeo, IFeatureClass pFeatureClass)
{Func<IFeature, IGeometry, IGeometry> func = (pFeature1, ge) =>{ITopologicalOperator pTopolo = pFeature1.ShapeCopy as ITopologicalOperator;IGeometry geo = pTopolo.Union(ge);(geo as ITopologicalOperator).Simplify();return geo;};List<int> lisOids = new List<int>();  //记录已经融合的要素IDIFeatureCursor pFeatureCursor = null;IFeature pFeature = null;ISpatialFilter pSpatialFilter = new SpatialFilterClass { SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects, GeometryField = pFeatureClass.ShapeFieldName, PostfixClause = "Order by SHAPE_AREA desc" };foreach (var ge in dicOidsGeo){pSpatialFilter.Geometry = ge.Value;pFeatureCursor = pFeatureClass.Update(pSpatialFilter, false);pFeature = pFeatureCursor.NextFeature();if (pFeature != null){pFeature.Shape = func(pFeature, ge.Value);pFeatureCursor.UpdateFeature(pFeature);lisOids.Add(ge.Key);}}System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor);if (lisOids.Count == 0)return dicOidsGeo.Count;var str = string.Empty;//删除lisOids.ForEach(x =>{str += $",{x}";dicOidsGeo.Remove(x);});str = str.Substring(1);IQueryFilter pQueryFilter = new QueryFilterClass();pQueryFilter.WhereClause = $"{pFeatureClass.OIDFieldName} in ({str})";  //str超过1000时需要分组pFeatureCursor = pFeatureClass.Update(pQueryFilter, false);while((pFeature= pFeatureCursor.NextFeature())!= null){pFeatureCursor.DeleteFeature();}System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor);return dicOidsGeo.Count;
}

ArcGIS消除叠加操作生成的碎图斑或狭长面相关推荐

  1. Arcgis中消除子流域划分时出现的零碎图斑或狭长面(Eliminate)

    在ArcGIS中叠加操作会带来碎图斑或狭长面,而这些碎图斑或狭长面又会影响后续的判断.所以就需要消除. 例如: 具体操作有以下方式: 1.最简单的的方法就是使用ArcGIS提供的"消除工具& ...

  2. Arcgis 熟练和操作

    Arcgis 熟练和操作 arcgis操作实验 注: 对于arcgis使用有一段时间了,前期是对于矢量,栅格数据的处理有了一个初步的了解,中期是在摸索中继续多层次的使用数据,以及逐步延伸到了空间分析, ...

  3. Arcgis利用dem数据生成等高线

    Arcgis利用dem数据生成等高线 问题描述 如果你在网上查,如何利用dem生成等高线,那么所有教程基本都是一样的,告诉你在工作箱中找到等值线工具,填入参数即可生成等高线.贴几个网上的链接教程: a ...

  4. Python自动生成代码 - 通过tkinter图形化操作生成代码框架

    Python自动生成代码 - 通过tkinter图形化操作生成代码框架 背景 脚本代码 Demo_CodeGenerator.py display.py FileHandler.py: 脚本运行结果: ...

  5. 使用ArcGIS为tif影像生成tfw文件

    使用ArcGIS为tif影像生成tfw文件 有时候我们拿到的tif影像文件的地理坐标信息直接存储在tif文件头中,没有配套的tfw文件.然而,某些软件要求必须有tfw文件,所以就会产生这一需求:将ti ...

  6. AS下怎样录制APP操作生成Gif动态图

    本文主要讲解Android下怎样录制APP操作生成gif动态图. Android App开发完成后,我们希望录制个gif做个展示.视频也可以展示,但是它没有gif轻量简单省流量.所以这篇文章就是讲解下 ...

  7. 【ARCGIS矢量化操作相关】

    这里写自定义目录标题 ARCGIS矢量化操作相关 ARCGIS矢量化操作相关 ArcScan一直是灰色 在自定义的扩展模块查看,打开以上窗口,查看是否勾选了ArcScan 确定勾选了后发现还是灰色的再 ...

  8. poi实现操作生成word表格和操作word中的图表数据

    poi实现操作生成word表格和操作word中的图表数据 写入word表格 1.1首先要将写入的数据整理好,将其封装在一个类中: 1.2 其次将数据写入word,写成表格 2 在word表格中动态修改 ...

  9. 关于Arcgis(geoscene) 的objectid生成

    objectid是arcgis自己定义的生成序列,不能随便填写,不然会和arcmap.arcgis pro .geoscene pro 导入的数据冲突 1.oracle获取Objectid序列的方法 ...

最新文章

  1. flume写入mysql_Flume高级之自定义MySQLSource
  2. ORACLE 12C PDB部分功能测试
  3. python fun
  4. UA MATH571A QE练习 R语言 多重共线性与岭回归
  5. ubuntu+VsCode+Cmake+eigen 开发eigen应用
  6. 启明云端分享|SSW101B WIFI调试会遇到的问题答疑
  7. ios 一步一步学会自定义地图吹出框(CalloutView)--(百度地图,高德地图,google地图)
  8. .NET Core 下使用 RabbitMQ
  9. 巨蟒python全栈开发flask5
  10. [Yii Framework] Another method to run cron in the share space server.
  11. 算法案例分析—字符串模式匹配算法
  12. 个人注册网站域名怎么注册?能注册哪些?
  13. 使用定时任务向百度推送网站URL
  14. 一文看懂“摩根系”,摩根士丹利、摩根大通、大摩、小摩到底有什么关系?
  15. 可以发布外链的平台有哪些
  16. 2015年计算机技术应用大赛,2015年全国大学生先进成图技术与产品信息建模大赛...
  17. 高等数学:第四章 不定积分(1)不定积分的概念与性质
  18. 《我所理解的生活》—读书总结
  19. Stable Diffusion背后原理(Latent Diffusion Models)
  20. Topographic Laser Ranging and Scanning_Principles and Processing——前言

热门文章

  1. 小程序如何生成海报分享朋友圈,android移动开发技术与应用
  2. 机器学习中的特征变量及处理总结
  3. 小程序的WXSS和JS
  4. Vue基础入门(下)
  5. linux下virtualbox使用
  6. 2022 无人直播rtmp推流工具-技术实现与思路
  7. 火狐html页面空白页,火狐修改空白新标签页背景颜色,适应深色主题
  8. 2022-2028年全球与中国粉芯电抗器行业发展趋势及竞争策略研究
  9. ja-netfilter 2022.1 配置
  10. kettle —— 数据过滤和值映射