一个完备的要素SHAPE裁剪函数
要素裁剪的问题,即如何裁剪要素的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裁剪函数相关推荐
- 虚函数之定义一个基类Shape,在此基础上派生出Rectangle和Circle再使用Rectangle类创建一个派生类Square。
定义一个基类Shape,在此基础上派生出Rectangle和Circle,二者都有getArea( )函数计算对象的面积,再使用Rectangle类创建一个派生类Square.将getArea()改造 ...
- Iar环境c语言调用汇编函数,如何在IAR EWARM中通过内联汇编程序在另一个模块中调用C函数?...
我在硬故障处理程序中有一些程序集.程序集基本上是为了传递当前堆栈指针作为参数(在R0中).它看起来像这样...如何在IAR EWARM中通过内联汇编程序在另一个模块中调用C函数? __asm(&quo ...
- pandas使用groupby.last函数获取每个组中的最后一个值实战:groupby.last函数获取每个组中的最后一个值、groupby.nth函数获取每个组中的最后一个值
pandas使用groupby.last函数获取每个组中的最后一个值实战:groupby.last函数获取每个组中的最后一个值.groupby.nth函数获取每个组中的最后一个值 目录
- R语言attributes函数(获取属性、设置属性)、attr函数(改变一个属性)、structure函数(改变数据形状)实战
R语言attributes函数(获取属性.设置属性).attr函数(改变一个属性).structure函数(改变数据形状)实战 目录
- 输入一个字符串,用子函数完成在字符串中找出ACSII码值最大的字符,将其放在第一个位置,并将该字符前的所有字符向后顺序移动
<程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p143 7.1.2 上级实训内容 [实训内容9]输入一个字符串,用子函数完成在字符串中找出ACSII码 ...
- 分段函数是不是一定初等函数_查漏补缺问题64:一个含多参数分段函数的连续性与可导性讨论...
一个含多参数分段函数的连续性与可导性讨论 题目: 设, 定义函数 (1) 讨论当满足什么条件时,函数在0点连续. (2) 讨论当满足什么条件时,函数在0点可导. (3) 讨论当满足什么条件时,函数的导 ...
- php controller 间调用,php – 在CodeIgniter中的另一个Controller中调用Controller函数
我的codeigniter应用程序中有一个控制器"user".这个控制器有一个名为logged_user_only()的函数: public function logged_use ...
- 一个完备的嵌入式系统硬件架构有哪几部分构成?
一个完备的嵌入式系统硬件架构有哪几部分构成? 图 1 给出了本文的讨论所基于的硬件平台,实际上,这也是大多数嵌入式系统的硬件平台.它包括两部分: (1) 以通用处理器为中心的协 ...
- 超图js版本添加矢量图层并在图层上绘一个面要素
效果: 在此例子基础上进行: https://blog.csdn.net/bcbobo21cn/article/details/89085909 定义一个js变量testlayer: 地图服务的url ...
最新文章
- ASP.NET MVC 控制器激活(二)
- Win10隐藏硬盘分区
- MySQL数据库:存储过程Procedure
- 带电插拔损坏设备原理_热水器不用时,要不要拔插座?看完才知道,天天拔比不拔更危险...
- C++ 高级数据类型(三)—— 指针
- Windows开发的内功和招式
- IDC Q1中国云服务报告:公有云IaaS市场增速持续高于全球
- linux源码文件名,Linux中文件名解析处理源码分析
- 2013年未之wpf项目乱述
- 结合PE格式对linker分析1
- 如何“发现”失联多年好友?代码告诉你!
- Eclipse\myeclipse加载项目building workspace过久
- Windows Server 2008 R2 小技巧
- 反思:太阳岛风景区的前生今世
- Java基础-JVM
- Pandas完美读取html格式的Excel所有隐藏数据
- imagemagick使用_使用ImageMagick裁剪和调整图像大小
- 实现调用阿里云API第一章——API请求与认证
- 2021广东高考成绩位次排名查询,广东高考排名对应大学-广东高考位次查询(2021年文科参考)...
- CentOS 6.4使用Nginx配置文件服务器
热门文章
- 【分享】20道Oracle运维常见面试题
- 快速搭建 Serverless 在线图片处理应用
- java redis使用卡死_记一次找因 redis 使用不当导致应用卡死 bug 的过程
- Jmeter简介以及简单模拟性能测试
- mybatis中mysql流式读取_MyBatis读取大量数据(流式读取)
- 单机多节点有意义吗_十行代码让你的单机“影分身”,分布式训练速度快到飞起...
- python3 “from PIL import...“报错
- 【知识星球】模型量化从1bit到8bit,二值到三值
- 【分割模型解读】感受野与分辨率的控制术—空洞卷积
- 亚马逊封店潮之后,跨境电商卖家该如何调整来拓展新的市场?