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

      

    个人学习记录
  • 相关阅读:
    [译]rabbitmq 2.1 Consumers and producers (not an economics lesson)
    mysql存储过程执行权限问题
    修改linux端口范围 ip_local_port_range
    centos6 自启动任务
    randomize_va_space
    linux 捕获信号处理中遇到的死锁
    squid基础配置
    [转]你应该了解的 一些web缓存相关的概念
    libevent简介 构成
    Libevent windows/linux下编译
  • 原文地址:https://www.cnblogs.com/jeshy/p/14853810.html
Copyright © 2011-2022 走看看