一个完备的要素SHAPE裁剪函数
要素裁剪的問題,即如何裁剪要素的SHAPE,還有許多網(wǎng)友在詢問,其實這并沒有什么特別之處。除了AO自帶的Clip函數(shù)以外,我一般都是使用ITopologicalOperator接口提供的拓?fù)浞椒▉碜约焊愣?#xff0c;原因很簡單,每一條要素的裁剪情況都能自己掌握。
要素裁剪無非兩種情況,一是不處理裁剪面邊緣上的要素,統(tǒng)統(tǒng)刪除,這個沒有什么問題,空間關(guān)系選擇Intersect即可;另一個是裁剪邊緣上的要素,如Polygon如果與裁剪面相交,則保留不想交的部分,如果Polyline與裁剪面相交,也是保留面外面的一部分線段。
這幾個拓?fù)浞椒ㄔ诤芏鄷r候會爆出異常,其實解決的方法在網(wǎng)上早就有了,關(guān)鍵是兩個Geoemtry的SpatialReference需要一致才行。下面給出一個完備的函數(shù):
??????? 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;
??????? }
轉(zhuǎn)載于:https://www.cnblogs.com/chiangbt/archive/2008/10/20/1314853.html
總結(jié)
以上是生活随笔為你收集整理的一个完备的要素SHAPE裁剪函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用xml+xsl给客户机添加超级管理帐
- 下一篇: 中级程序员教程-Cache映像技术