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()#展示
    

      

    个人学习记录
  • 相关阅读:
    centos7 yum错误相关
    centos7 jenkins
    vim 常用命令
    Effective STL(第7条)
    【hihoCoder】1049.后序遍历
    C++ 单元测试 Cpputest
    【hihoCoder】1041. 国庆出游
    LeetCode(43. Multiply Strings)
    【LeetCode】16. 4Sum
    【LeetCode】1. Two Sum
  • 原文地址:https://www.cnblogs.com/jeshy/p/14853810.html
Copyright © 2011-2022 走看看