zoukankan      html  css  js  c++  java
  • 使用AO创建平头buffer

    http://www.gisall.com/html/47/122747-2960.html 我们平常使用ITopologicalOperator的buffer是圆角的图形。如下图 但实有时候我们也需要像下面那样的平头buffer的效果。 如何做到这种效果?说一下思路。 下面是使用线去生成这种平头的buffer图形 1.分别使用线的图形向正方向和负方向平移一定的距离,使用IConstructCurve接口可以实现等距偏移 这样可以很好的支持曲线和折线 2.分别把偏移后的两条线的所有节点添加到一个IPointCollection里面 3.用一个PolygonClass去初始化一个IPointCollection,把刚才的所有节点注入此IPointCollection 4.重排IPointCollection的节点次序,将其转换为Polygon。 具体代码如下: /// <summary> /// 平头buffer /// </summary> /// <param name="myLine">用做buffer的线图形</param> /// <param name="bufferDis">buffer的距离</param> /// <returns></returns> /// private IPolygon FlatBuffer(IPolyline myLine, double bufferDis) { object o = System.Type.Missing; //分别对输入的线平移两次(正方向和负方向) IConstructCurve mycurve = new PolylineClass(); mycurve.ConstructOffset(myLine, bufferDis, ref o, ref o); IPointCollection pCol = mycurve as IPointCollection; IConstructCurve mycurve2 = new PolylineClass(); mycurve2.ConstructOffset(myLine, -1 * bufferDis, ref o, ref o); //把第二次平移的线的所有节点翻转 IPolyline addline = mycurve2 as IPolyline; addline.ReverseOrientation(); //把第二条的所有节点放到第一条线的IPointCollection里面 IPointCollection pCol2 = addline as IPointCollection; pCol.AddPointCollection(pCol2); //用面去初始化一个IPointCollection IPointCollection myPCol = new PolygonClass(); myPCol.AddPointCollection(pCol); //把IPointCollection转换为面 IPolygon myPolygon = myPCol as IPolygon; //简化节点次序 myPolygon.SimplifyPreserveFromTo(); return myPolygon; }
  • 相关阅读:
    从零开始学VUE3.X-常用模版语法
    从零开始学3.X-生命周期函数
    从零开始学TypeScript-readonly
    从零开始学Typescript-基础类型
    从零开始学Typescript-webpack打包
    探索 .NET Core 依赖注入的 IServiceProvider
    在.NET Core 中使用 FluentValidation 进行规则验证
    盘点大厂的那些开源项目
    探索 .NET Core 依赖注入的 IServiceCollection
    使用 Benchmark.NET 测试代码性能
  • 原文地址:https://www.cnblogs.com/adodo1/p/4327357.html
Copyright © 2011-2022 走看看