cl991036
管理员
管理员
  • 注册日期2003-07-25
  • 发帖数5917
  • QQ14265545
  • 铜币29669枚
  • 威望217点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • GIS帝国铁杆
阅读:1548回复:1

一个完备的要素SHAPE裁剪函数

楼主#
更多 发布于:2008-10-24 19:37
<DIV class=postText>
<P>要素裁剪的问题,即如何裁剪要素的SHAPE,还有许多网友在询问,其实这并没有什么特别之处。除了AO自带的Clip函数以外,我一般都是使用ITopologicalOperator接口提供的拓扑方法来自己搞定,原因很简单,每一条要素的裁剪情况都能自己掌握。</P>
<P>要素裁剪无非两种情况,一是不处理裁剪面边缘上的要素,统统删除,这个没有什么问题,空间关系选择Intersect即可;另一个是裁剪边缘上的要素,如Polygon如果与裁剪面相交,则保留不想交的部分,如果Polyline与裁剪面相交,也是保留面外面的一部分线段。</P>
<P>这几个拓扑方法在很多时候会爆出异常,其实解决的方法在网上早就有了,关键是两个Geoemtry的SpatialReference需要一致才行。下面给出一个完备的函数:<BR>        public static IGeometry getUpdateOuterGeometry2(IGeometry srcGeo, IGeometry refPolygon) <BR>        {<BR>            if (srcGeo.SpatialReference != null ;; refPolygon.SpatialReference == null)<BR>                refPolygon.Project(srcGeo.SpatialReference);<BR>            if (srcGeo.SpatialReference == null ;; refPolygon.SpatialReference != null)<BR>                srcGeo.Project(refPolygon.SpatialReference);</P>
<P>            IGeometry pGeo = null;<BR>            ITopologicalOperator2 pTopo;<BR>            ITopologicalOperator2 pTopo2;<BR>            switch (srcGeo.GeometryType) <BR>            {<BR>                case esriGeometryType.esriGeometryPolyline:<BR>                    pTopo = (ITopologicalOperator2)refPolygon ;<BR>                    pTopo.IsKnownSimple_2 = false;<BR>                    pTopo.Simplify();<BR>                    pTopo2 = (ITopologicalOperator2)srcGeo;<BR>                    pTopo2.IsKnownSimple_2 = false;<BR>                    pTopo2.Simplify();<BR>                    pGeo = pTopo2.Difference(pTopo.Intersect(srcGeo, esriGeometryDimension.esriGeometry1Dimension));<BR>                    break;<BR>                case esriGeometryType.esriGeometryPolygon:<BR>                    pTopo = (ITopologicalOperator2)srcGeo;<BR>                    pTopo.IsKnownSimple_2 = false;<BR>                    pTopo.Simplify();<BR>                    pGeo = pTopo.Difference(refPolygon);<BR>                    break;<BR>                default:<BR>                    pGeo = srcGeo;<BR>                    break;<BR>            }<BR>            return pGeo;<BR>        }</P></DIV>
喜欢0 评分0
没钱又丑,农村户口。头可断,发型一定不能乱。 邮箱:gisempire@qq.com
ynkm
路人甲
路人甲
  • 注册日期2004-05-26
  • 发帖数264
  • QQ
  • 铜币27枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2008-11-19 13:10
<img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" />
举报 回复(0) 喜欢(0)     评分
游客

返回顶部