• 使用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; }
  • 相关阅读:
    win10 uwp 弹起键盘不隐藏界面元素
    win10 uwp 存放网络图片到本地
    win10 uwp 存放网络图片到本地
    sublime Text 正则替换
    sublime Text 正则替换
    win10 uwp 绘图 Line 控件使用
    win10 uwp 绘图 Line 控件使用
    AJAX 是什么?
    什么是 PHP SimpleXML?
    PHP XML DOM:DOM 是什么?
  • 原文地址:https://www.cnblogs.com/adodo1/p/4327357.html
Copyright © 2020-2023  润新知