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

      

    个人学习记录
  • 相关阅读:
    socket的几大异常以及其出现的原因
    将文件打包成apk
    putty失活不挂起运行
    天气免费接口
    内存泄漏
    The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build
    009 预处理 #pragma once; typedef; #ifdef
    008 区别 : NULL nullptr
    007 头文件 : 作用/组织/包含
    006 整数/浮点数/cpu频率
  • 原文地址:https://www.cnblogs.com/jeshy/p/14853810.html
Copyright © 2011-2022 走看看