码迷,mamicode.com
首页 > 编程语言 > 详细

基于Douglas-Peucker算法对矢量数据简化

时间:2021-06-06 18:53:49      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:种子   shape   range   导入   show   算法   pandas   上下   映射   

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

  

基于Douglas-Peucker算法对矢量数据简化

标签:种子   shape   range   导入   show   算法   pandas   上下   映射   

原文地址:https://www.cnblogs.com/jeshy/p/14853810.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!