首页 > 编程语言 > 详细

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

时间:2021-06-05 21:54:18      阅读:30      评论:0      收藏:0      [点我收藏+]
#### 基于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算法对矢量数据简化

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!