Delauney.py 2.5 KB
# coding=utf-8
#author:        4N
#createtime:    2022/3/15
#email:         nheweijun@sina.com

from osgeo import ogr
from osgeo.ogr import *
import math
import os
import copy
from test.zonghe.RepresentPoint import RepresentPoint



class DelauneyNode:

    def __init__(self, rp):
        self.rp = rp
        self.children_nodes = list()
        self.children_delauney_lines = list()

    def get_all_node(self):
        for node in self.children_nodes:
            yield node.get_all_node()
        yield self

    def get_rps(self):
        for node in self.children_nodes:
            for rp in node.get_rps():
                yield rp
        yield self.rp

    def get_polygons(self):
        for node in self.children_nodes:
            for rp in node.get_rps():
                yield rp.polygon
        yield self.rp.polygon

    def get_delauney_lines(self):
        for node in self.children_nodes:
            for ll in node.get_delauney_lines():
                yield ll
        for l in self.children_delauney_lines:
            yield l

    def add_children(self,node,delauney_line):
        self.children_nodes.append(node)
        self.children_delauney_lines.append(delauney_line)

class DelauneyLine:

    def __init__(self,rp1,rp2):

        self.rp1 = rp1
        self.rp2 = rp2
        self.distance = rp1.polygon.Distance(rp2.polygon)

        self.line = ogr.Geometry(ogr.wkbLineString)
        self.line.AddPoint(self.rp1.point.GetX(),self.rp1.point.GetY())
        self.line.AddPoint(self.rp2.point.GetX(),self.rp2.point.GetY())


class DelauneyMinTree:

    def __init__(self):
        self.delauney_lines_list = list()
        self.rps = set()

    def append(self,delauney_line):
        # self.delauney_lines.add(delauney_line)

        self.rps.add(delauney_line.rp1)
        self.rps.add(delauney_line.rp2)

        self.delauney_lines_list.append(delauney_line)

    def get_rps(self):
        return self.rps

    def get_other_relate_delauney_lines(self,other_delauney_lines_kv):
        other_relate_delauney_lines = []
        for rp in self.rps:
            other_relate_delauney_lines.extend(other_delauney_lines_kv.get(rp))
        return other_relate_delauney_lines

    def get_other_rp(self,delauney_line):
        rp1 = delauney_line.rp1
        rp2 = delauney_line.rp2

        if not self.rps.__contains__(rp1):
            return rp1
        if not self.rps.__contains__(rp2):
            return rp2
        return None