zoukankan      html  css  js  c++  java
  • 基于Douglas-Peucker算法对矢量数据简化

    #### 基于Douglas-Peucker算法对矢量数据简化  ####
    # 当原始的矢量数据因为形状复杂,包含的点较多时,会导致其文件体积较大,
    # 如果我们需要在在线地图上叠加它们,太大体积的矢量数据不仅会拖慢网络传输速度,
    # 也会给图形的渲染带来更大的压力,这时对矢量数据进行简化就非常有必要。
    # 基于Douglas-Peucker算法,基于预先设定的阈值ϵ,在递归判断的过程中删掉所有小于ϵ的点
    
    # 例如: 基于-1到1之间的均匀分布,创建一条上下波动的折线,然后进行简化
    
    import numpy as np
    import shapely
    import geopandas as gpd
    from matplotlib import pyplot as plt
    import matplotlib.patches as mpatches
    np.random.seed(10)# 固定随机数种子
    
    # 创建线
    line = shapely.geometry.LineString([(_, np.random.uniform(-1, 1)) for _ in range(10)])
    
    # 绘制简化前
    ax = gpd.GeoSeries([line]).plot(color='red')
    
    # 绘制简化后
    ax = gpd.GeoSeries([line]).simplify(tolerance=0.5).plot(color='blue',
                                                            ax=ax,
                                                            linestyle='--')
    # 制作图例映射对象列表
    LegendElement = [plt.Line2D([], [], color='red', label='Uu-Simplified'),
                     plt.Line2D([], [], color='blue', linestyle='--', label='Simplified')]
    # 将制作好的图例映射对象列表导入legend()中,并配置相关参数
    ax.legend(handles=LegendElement,
              loc='lower left',
              fontsize=10)
    ax.set_ylim((-2.5, 1))
    ax.axis('off')
    plt.savefig('VectorLineSimplify.png', dpi=300, bbox_inches='tight', pad_inches=0)
    plt.show()#展示
    

      

    个人学习记录
  • 相关阅读:
    ORM执行原生sql, Python脚本调用Django环境, ORM事务, sql模式说明
    ORM多表更新删除 查询
    ORM多表操作
    Java BigDecimal类型的数据运算方法
    js获取表格中的数据转化为json字符串
    在threamleaf中使用循环遍历输出list集合
    sql中使用cast转化数据格式(整数或者小数)
    mybatis的xml中使用模糊搜索查询
    k8s挂载ceph
    kubernetes HPA
  • 原文地址:https://www.cnblogs.com/jeshy/p/14853810.html
Copyright © 2011-2022 走看看