设为首页
优惠IDC
收藏本站
六狼博客
六狼论坛
开启辅助访问
切换到窄版
用户名
Email
自动登录
找回密码
密码
登录
立即注册
只需一步,快速开始
只需一步,快速开始
快捷导航
门户
首页
BBS
云计算
大数据
手机
移动开发android,ios,windows phone,windows mobile
编程
编程技术java,php,python,delphi,ruby,c,c++
前端
WEB前端htmlcss,javascript,jquery,html5
数据库
数据库开发Access,mysql,oracle,sql server,MongoDB
系统
操作系统windows,linux,unix,os,RedHat,tomcat
架构
项目管理
软件设计,架构设计,面向对象,设计模式,项目管理
企业
服务
运维实战
神马
搜索
搜索
热搜:
php
java
python
ruby
hadoop
sphinx
solr
ios
android
windows
centos
本版
帖子
用户
六狼论坛
»
首页
›
企业信息化
›
GIS技术
›
9.2 空间拓扑运算
返回列表
查看:
401
|
回复:
0
9.2 空间拓扑运算
[复制链接]
ProjectT
ProjectT
当前离线
积分
32
窥视卡
雷达卡
升级
64%
当前用户组为
童生
当前积分为
32
, 升到下一级还需要 18 点。
8
主题
8
主题
8
主题
童生
童生, 积分 32, 距离下一级还需 18 积分
童生, 积分 32, 距离下一级还需 18 积分
积分
32
发消息
楼主
|
发表于 2012-10-25 00:54:26
|
显示全部楼层
|
阅读模式
9.2. 空间拓扑运算
9.2.1. ITopologicalOperator接口
通过一系列基于一个或者多个几何图形中点间的逻辑比较,然后返回另外一些几何图形,这个过程就是空间几何图形的拓扑运算。
空间几何图形的拓扑运算包括裁切(Clip)、凸多边形(Convex hull)、切割(Cut)、差分(Difference)、交集(Intersect)、对称差分(又称为异或,Symmetric difference)和并集(Union)等,这些拓扑运算在ITopologicalOperator接口中定义,在GeometryBag、Multipoint、Point、Polygon、Polyline类中实现。
注意ITopologicalOperator接口的方法仅仅能使用在高级几何对象上,即Point、Multipoint、Polyline和Polygon;如果要在低级的几何对象上如Segment、Path或Ring上使用,则需要先组合为高级别几何对象才行。
ITopologicalOperator::Boundary可以返回一个几何对象的边界,边界的维度比源对象要低一维。
ITopologicalOperator::Buffer可以给一个高级别几何对象产生一个缓冲区,无论是点、多边形还是多义线,他们的缓冲区都是一个具有面积的几何对象。
ITopologicalOperator::Clip方法可以将一个几何对象使用一个包络线来进行裁切,裁切的结果为几何对象被包络线包围的部分。
ITopologicalOperator::ConstructUnion方法可以将一个几何对象的枚举(包含了多个几何对象的枚举值)与同维度的单个几何对象合并,这种方法在大量几何对象合并的时候是非常有效的;Union方法则可以合并两个同维度的单个几何对象,合并后的两个单个几何对象将变成一个几何对象。
ITopologicalOperator::ConvexHull方法可以产生一个几何图形的最小的边框凸多边形。
ITopologicalOperator::Cut方法指定一条切割曲线和一个几何图形,经过切割运算后把几何图形分为左右两部分,左右两部分是相对曲线的方向而言;注意,点和多点是不能被切割的,而折线和多边形只有与切割曲线相交时才能进行切割运算。
ITopologicalOperator::Difference方法可以产生两个几何对象的差集。如A是源对象,B是参与运算的几何对象,则C是A减去A与B的交集后剩下的部分;而SymmetricDifference(对称差分)方法则是将A与B的并集减去A与B的交集部分。
ITopologicalOperator::Intersection则可以返回两个维度几何形体对象的交集,即两个对象重合部分。
参与空间拓扑运算的几何形体,必须是拓扑上简单的(topologically simple),否则会产生esriGeometryError536错误。
当几何形体自上次验证之后并未发生变化,那么IsKnowSimple属性返回True;而IsSimple才是实际上验证几何形体是不是拓扑上简单的。因此在使用IsSimple之前检验IsKnownSimple是更有效的,特别是在循环里,如下代码:
IEnumGeometry pEnumGeom;pEnumGeom
= pGeometryBag
as
IEnumGeometry;ITopologicalOperator pTopoOp;pTopoOp
= pEnumGeom.Next()
as
ITopologicalOperator;
while
( pTopoOp !=
null
){
//
首先验证IsKnownSimple因为它速度更快
//
在枚举特别大的时候这样更节约时间
if
(!
( pTopoOp.IsKnownSimple)) {
if
(!
( pTopoOp.IsSimple)) pTopoOp.Simplify(); } pTopoOp
= pEnumGeom.Next()
as
ITopologicalOperator;}
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2008-2020
六狼论坛
(http://it.6wolf.com) 版权所有 All Rights Reserved.
Powered by
Discuz!
X3.4
京ICP备14020293号-2
本网站内容均收集于互联网,如有问题请联系
QQ:389897944
予以删除
快速回复
返回顶部
返回列表