• 大小: 4KB
    文件类型: .py
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: Python
  • 标签: DP  python  

资源简介

实现了道格拉斯普克算法的Python源代码,用于处理数据压缩

资源截图

代码片段和文件信息

# -*- coding=utf-8 -*-

import gpxpy
import gpxpy.gpx
import math
from pyproj import Proj

#定义一个点类
class cPoint:
    x=0.0
    y=0.0
    index=0

    def __init__(selfxyindex):
        self.x=x
        self.y=y
        self.index=index



#定义道格拉斯普克算法类
class Douglas:
    cPoints=[] #存储点的列表
    D=1      #在道格拉斯普克算法中需要自定义设置的阈值
    def __init__(selfcPoints):
        self.cPoints=cPoints
    def compress(selfp1p2):
        oPoints=[]
        swichvalue=False
        #判断是否需要进行抽稀算法
        #直线一般式方程的3个系数


        A=(p1.y-p2.y)/math.sqrt(math.pow(p1.y-p2.y2)+math.pow(p1.x-p2.x2))
        B=(p2.x-p1.x)/math.sqrt(math.pow(p1.y-p2.y2)+math.pow(p1.x-p2.x2))
        C=(p1.x*p2.y-p2.x*p1.y)/math.sqrt(math.pow(p1.y-p2.y2)+math.pow(p1.x-p2.x2))
        m=self.cPoints.index(p1)
        n=self.cPoints.index(p2)
        #print m
        #print n
        distance=[]
        middle=None
        if(n==m+1):    #判断起点和终点之间是否有点
            return
        #计算中间点到直线的距离
        for i in range(m+1n):
            d=abs(A*self.cPoints[i].x+B*self.cPoints[i].y+C)/math.sqrt(math.pow(A2)+math.pow(B2))
            distance.append(d)
        dmax=max(distance)
        #print distance
        if dmax>self.D:
            swichvalue=True
        else:
            swichvalue=False
        #for i in range(09):
            #print self.cPoints[i].x
        if(swichvalue==False):
            for j in range(m+1n):
                #del self.cPoints[j]
                self.cPoints[j].x=0
        else:
            for h in range(m+1n):
                if(abs(A*self.cPoints[h].x+B*self.cPoints[h].y+C)/math.sqrt(math.pow(A2)+math.pow(B2))==dmax):
                    middle=self.cPoints[h]
            self.compress(p1middle)
            self.compress(middlep2)

        #for i in range(0len(self.cPoints)):
            #if self.cPoints[i].x!=0:
                #oPoints.append(self.cPoints[i])

        return oPoints



    def __init__(selfmpoin

评论

共有 条评论