要素裁剪的问题,即如何裁剪要素的SHAPE,还有许多网友在询问,其实这并没有什么特别之处。除了AO自带的Clip函数以外,我一般都是使用ITopologicalOperator接口提供的拓扑方法来自己搞定,原因很简单,每一条要素的裁剪情况都能自己掌握。

要素裁剪无非两种情况,一是不处理裁剪面边缘上的要素,统统删除,这个没有什么问题,空间关系选择Intersect即可;另一个是裁剪边缘上的要素,如Polygon如果与裁剪面相交,则保留不想交的部分,如果Polyline与裁剪面相交,也是保留面外面的一部分线段。

这几个拓扑方法在很多时候会爆出异常,其实解决的方法在网上早就有了,关键是两个Geoemtry的SpatialReference需要一致才行。下面给出一个完备的函数:
        public static IGeometry getUpdateOuterGeometry2(IGeometry srcGeo, IGeometry refPolygon)
        {
            if (srcGeo.SpatialReference != null && refPolygon.SpatialReference == null)
                refPolygon.Project(srcGeo.SpatialReference);
            if (srcGeo.SpatialReference == null && refPolygon.SpatialReference != null)
                srcGeo.Project(refPolygon.SpatialReference);

IGeometry pGeo = null;
            ITopologicalOperator2 pTopo;
            ITopologicalOperator2 pTopo2;
            switch (srcGeo.GeometryType)
            {
                case esriGeometryType.esriGeometryPolyline:
                    pTopo = (ITopologicalOperator2)refPolygon ;
                    pTopo.IsKnownSimple_2 = false;
                    pTopo.Simplify();
                    pTopo2 = (ITopologicalOperator2)srcGeo;
                    pTopo2.IsKnownSimple_2 = false;
                    pTopo2.Simplify();
                    pGeo = pTopo2.Difference(pTopo.Intersect(srcGeo, esriGeometryDimension.esriGeometry1Dimension));
                    break;
                case esriGeometryType.esriGeometryPolygon:
                    pTopo = (ITopologicalOperator2)srcGeo;
                    pTopo.IsKnownSimple_2 = false;
                    pTopo.Simplify();
                    pGeo = pTopo.Difference(refPolygon);
                    break;
                default:
                    pGeo = srcGeo;
                    break;
            }
            return pGeo;
        }

转载于:https://www.cnblogs.com/chiangbt/archive/2008/10/20/1314853.html

一个完备的要素SHAPE裁剪函数相关推荐

  1. 虚函数之定义一个基类Shape,在此基础上派生出Rectangle和Circle再使用Rectangle类创建一个派生类Square。

    定义一个基类Shape,在此基础上派生出Rectangle和Circle,二者都有getArea( )函数计算对象的面积,再使用Rectangle类创建一个派生类Square.将getArea()改造 ...

  2. Iar环境c语言调用汇编函数,如何在IAR EWARM中通过内联汇编程序在另一个模块中调用C函数?...

    我在硬故障处理程序中有一些程序集.程序集基本上是为了传递当前堆栈指针作为参数(在R0中).它看起来像这样...如何在IAR EWARM中通过内联汇编程序在另一个模块中调用C函数? __asm(&quo ...

  3. pandas使用groupby.last函数获取每个组中的最后一个值实战:groupby.last函数获取每个组中的最后一个值、groupby.nth函数获取每个组中的最后一个值

    pandas使用groupby.last函数获取每个组中的最后一个值实战:groupby.last函数获取每个组中的最后一个值.groupby.nth函数获取每个组中的最后一个值 目录

  4. R语言attributes函数(获取属性、设置属性)、attr函数(改变一个属性)、structure函数(改变数据形状)实战

    R语言attributes函数(获取属性.设置属性).attr函数(改变一个属性).structure函数(改变数据形状)实战 目录

  5. 输入一个字符串,用子函数完成在字符串中找出ACSII码值最大的字符,将其放在第一个位置,并将该字符前的所有字符向后顺序移动

    <程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p143 7.1.2 上级实训内容 [实训内容9]输入一个字符串,用子函数完成在字符串中找出ACSII码 ...

  6. 分段函数是不是一定初等函数_查漏补缺问题64:一个含多参数分段函数的连续性与可导性讨论...

    一个含多参数分段函数的连续性与可导性讨论 题目: 设, 定义函数 (1) 讨论当满足什么条件时,函数在0点连续. (2) 讨论当满足什么条件时,函数在0点可导. (3) 讨论当满足什么条件时,函数的导 ...

  7. php controller 间调用,php – 在CodeIgniter中的另一个Controller中调用Controller函数

    我的codeigniter应用程序中有一个控制器"user".这个控制器有一个名为logged_user_only()的函数: public function logged_use ...

  8. 一个完备的嵌入式系统硬件架构有哪几部分构成?

                一个完备的嵌入式系统硬件架构有哪几部分构成? 图 1 给出了本文的讨论所基于的硬件平台,实际上,这也是大多数嵌入式系统的硬件平台.它包括两部分: (1) 以通用处理器为中心的协 ...

  9. 超图js版本添加矢量图层并在图层上绘一个面要素

    效果: 在此例子基础上进行: https://blog.csdn.net/bcbobo21cn/article/details/89085909 定义一个js变量testlayer: 地图服务的url ...

最新文章

  1. ASP.NET MVC 控制器激活(二)
  2. Win10隐藏硬盘分区
  3. MySQL数据库:存储过程Procedure
  4. 带电插拔损坏设备原理_热水器不用时,要不要拔插座?看完才知道,天天拔比不拔更危险...
  5. C++ 高级数据类型(三)—— 指针
  6. Windows开发的内功和招式
  7. IDC Q1中国云服务报告:公有云IaaS市场增速持续高于全球
  8. linux源码文件名,Linux中文件名解析处理源码分析
  9. 2013年未之wpf项目乱述
  10. 结合PE格式对linker分析1
  11. 如何“发现”失联多年好友?代码告诉你!
  12. Eclipse\myeclipse加载项目building workspace过久
  13. Windows Server 2008 R2 小技巧
  14. 反思:太阳岛风景区的前生今世
  15. Java基础-JVM
  16. Pandas完美读取html格式的Excel所有隐藏数据
  17. imagemagick使用_使用ImageMagick裁剪和调整图像大小
  18. 实现调用阿里云API第一章——API请求与认证
  19. 2021广东高考成绩位次排名查询,广东高考排名对应大学-广东高考位次查询(2021年文科参考)...
  20. CentOS 6.4使用Nginx配置文件服务器

热门文章

  1. 【分享】20道Oracle运维常见面试题
  2. 快速搭建 Serverless 在线图片处理应用
  3. java redis使用卡死_记一次找因 redis 使用不当导致应用卡死 bug 的过程
  4. Jmeter简介以及简单模拟性能测试
  5. mybatis中mysql流式读取_MyBatis读取大量数据(流式读取)
  6. 单机多节点有意义吗_十行代码让你的单机“影分身”,分布式训练速度快到飞起...
  7. python3 “from PIL import...“报错
  8. 【知识星球】模型量化从1bit到8bit,二值到三值
  9. 【分割模型解读】感受野与分辨率的控制术—空洞卷积
  10. 亚马逊封店潮之后,跨境电商卖家该如何调整来拓展新的市场?