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; }
  • 相关阅读:
    字节输入输出流
    数据库安全性
    数据库设计:三种范式
    (Java篇) 代理服务:Nginx ---》(1)介绍及安装
    (十七)微信小程序:全局优化
    (十六)微信小程序:电影详情页
    (十五)微信小程序:优化电影页面
    (十四)微信小程序:上拉加载 下拉刷新
    (十三)微信小程序:更多电影页面
    管理:会议纲要
  • 原文地址:https://www.cnblogs.com/adodo1/p/4328080.html
Copyright © 2011-2022 走看看