Exemplo n.º 1
0
 def getBbox(self):
     '''!
     '''
     ptos = self.__poli.getPuntos()
     x = [i.getX() for i in ptos]
     y = [i.getY() for i in ptos]
     return [Punto2D(min(x), max(y)), Punto2D(max(x), min(y))]
Exemplo n.º 2
0
 def setNegativos(self, Negativos):
     '''!
     @brief: Método para introducir la propiedad Negativos.
     @param Neagativos bool|str|int: Estado de la propiedad Negativos.
     @note Neagativos True: Permite alojar números negativos.
     @note Neagativos False: No permite alojar números negativos.
     @exception: Se producira una excepción si el valor introducido no se puede convertir a bool.
     @exception: Se producira una excepcion si se cambia la propiedad negativos a Flase y existen coordenadas negativas en la clase.
     '''
     Punto2D.setNegativos(self, Negativos)
     if self.getNegativos() == False:
         if self.__Z != None and self.__Z < 0:
             raise Exception("La coordenada Z de la clase es negativa.")
Exemplo n.º 3
0
def main():
    l=Linea2D(Punto2D(10,10),Punto2D(20,30))
    print(l.toString())
    print(l.toJSON())

    print(loads(l.toJSON())['Punto inicial']['X'])
    print(l.toGeoJSON())
    print(loads(l.toGeoJSON())['coordinates'])
    print(l.toWKT())
    l.setFromWKT('LINESTRING (100.0 10.0, 20.0 30.0)')
    print(l.toWKT())
    l.setFromGeoJSON('{"type":"LineString","coordinates":[[10.0,10.0],[20.0,30.0]]}')
    print(l.toWKT()) 
Exemplo n.º 4
0
 def setNegativos(self, Negativos):
     '''!
     @brief: Método para introducir la propiedad Negativos.
     @param Neagativos bool|str|int: Estado de la propiedad Negativos.
     @note Neagativos True: Permite alojar números negativos.
     @note Neagativos False: No permite alojar números negativos.
     @exception: Se producira una excepción si el valor introducido no se puede convertir a bool.
     @exception: Se producira una excepcion si se cambia la propiedad negativos a Flase y existen coordenadas negativas en la clase.
     '''
     Punto2D.setNegativos(self, Negativos)
     if self.getNegativos()==False:
         if self.__Z!=None and self.__Z<0:
             raise Exception("La coordenada Z de la clase es negativa.")
Exemplo n.º 5
0
 def PointIn(self,Punto2D,tolerance=0):
     #Añadir tolerancia.
     '''!
     @brief: El método comprueba si un punto se encuentra sobre la línea. The method check if point is in line.
     '''
     v1=self.getAX()
     v2=self.getAY()
     if v1==0:
         #Incremento de X es 0. Línea vertical.
         vals=[self.__pini.getY(),self.__pfin.getY()]
         vals.sort()
         vals[0]=vals[0]-tolerance
         vals[1]=vals[1]+tolerance
         if Punto2D.getY()>=vals[0] and Punto2D.getY()<=vals[1]:
             return True
         else:
             return False
     if v2==0:
         #Incremento de Y es 0. Línea horizontal.
         vals=[self.__pini.getX(),self.__pfin.getX()]
         vals.sort()
         vals[0]=vals[0]-tolerance
         vals[1]=vals[1]+tolerance
         if Punto2D.getX()>=vals[0] and Punto2D.getX()<=vals[1]:
             return True
         else:
             return False
     val=self.__pini.getY()-((self.__pini.getX()*v2)/v1)+(v2/v1)*Punto2D.getX()
     print(val,tolerance,Punto2D.getY())
     if Punto2D.getY()+tolerance<=val and Punto2D.getY()-tolerance>=val:
         return True
     else:
         return False
Exemplo n.º 6
0
 def setFromWKT(self,wkt):
     '''!
     '''
     try:
         coor = wkt.split('LINESTRING')[1]
     except Exception as e:
         raise Exception(e)
     coor = coor.replace('(', '')
     coor = coor.replace(')', '')
     coor=coor.split(',')
     if len(coor)>2:
         raise Exception("La linea contiene más de dos puntos.")
     vals=coor[0].rstrip().split()
     self.setPuntoInicial(Punto2D(vals[0],vals[1]))
     vals=coor[1].rstrip().split()
     self.setPuntoFinal(Punto2D(vals[0],vals[1]))
Exemplo n.º 7
0
 def setFromWKT(self, wkt):
     '''!
     '''
     self.__poli = None
     self.__Huecos = []
     coor = wkt.split('POLYGON')[1]
     coor = coor.split(')')
     for indi1, i in enumerate(coor):
         puntos = []
         print(i)
         if indi1 == 0:
             i = i.replace('(', '')
             i = i.split(',')
             for j in i:
                 j = j.rstrip()
                 j = j.split()
                 puntos.append(Punto2D(j[0], j[1]))
             pol = poli2d.PoliLinea2D()
             pol.setPoliLineaFromPuntos(puntos)
             self.__poli = pol
         else:
             if i == '':
                 continue
             i = i[1:]
             i += ')'
             i = 'LINESTRING ' + i
             #print(i)
             pol = poli2d.PoliLinea2D()
             pol.setWKT(i)
             self.setHuecos(pol)
Exemplo n.º 8
0
 def toGeoJSON(self):
     '''!
     '''
     val = Punto2D.toGeoJSON(self).split('\n')
     val[2] = '"coordinates":' + '[' + str(self.getX()) + ',' + str(
         self.getY()) + ',' + str(self.__Z) + ']'
     return '\n'.join(val)
Exemplo n.º 9
0
 def setFromGeoJSON(self,geojson):
     '''!
     '''
     try:
         coors=loads(geojson)
     except Exception as e:
         raise Exception(e)
     
     if coors['type'] != 'LineString':
         raise Exception("El GeoJSON introducido no corresponde con una línea")
     else:
         coor = coors['coordinates']
     if len(coors)>2:
         raise Exception("")
     else:
         self.setPuntoInicial(Punto2D(coor[0][0],coor[0][1]))
         self.setPuntoFinal(Punto2D(coor[1][0],coor[1][1])) 
Exemplo n.º 10
0
 def toString(self):
     '''!
     @brief: Método que devuleve toda la información del punto en formato str.
     @return str: Un string con toda la información del punto.
     '''
     val = Punto2D.toString(self).split('\n')
     val.insert(2, "Z:" + str(self.__Z))
     return '\n'.join(val)
Exemplo n.º 11
0
 def toJSON(self):
     '''!
     @brief: Método que devuleve toda la información del punto en formato JSON.
     @return str: Un string en formato JSON.
     '''
     val=Punto2D.toJSON(self).split('\n')
     val.insert(3,'"Z":'+'"'+str(self.__Z)+'"'+",")
     return '\n'.join(val)
Exemplo n.º 12
0
 def toJSON(self):
     '''!
     @brief: Método que devuleve toda la información del punto en formato JSON.
     @return str: Un string en formato JSON.
     '''
     val = Punto2D.toJSON(self).split('\n')
     val.insert(3, '"Z":' + '"' + str(self.__Z) + '"' + ",")
     return '\n'.join(val)
Exemplo n.º 13
0
 def toString(self):
     '''!
     @brief: Método que devuleve toda la información del punto en formato str.
     @return str: Un string con toda la información del punto.
     '''
     val=Punto2D.toString(self).split('\n')
     val.insert(2,"Z:"+str(self.__Z))
     return '\n'.join(val)
Exemplo n.º 14
0
 def getCentroide(self):
     '''!
     '''
     ptos = self.__poli.getPuntos()[0:-1]
     X = [i.getX() for i in ptos]
     Y = [i.getY() for i in ptos]
     X = mean(X)
     Y = mean(Y)
     return Punto2D(X, Y)
Exemplo n.º 15
0
def main():
    pl = PoliLinea2D()
    pl.setPoliLineaFromLineas([
        l2d.Linea2D(Punto2D(0.0, 0.0), Punto2D(10, 0)),
        l2d.Linea2D(Punto2D(10.0, 0), Punto2D(-10, 10)),
        l2d.Linea2D(Punto2D(-10, 10.0), Punto2D(10, 10)),
        l2d.Linea2D(Punto2D(10.0, 10.0), Punto2D(-10, 0)),
        l2d.Linea2D(Punto2D(-10.0, 0), Punto2D(0, 0))
    ])
    print(pl.isClose())
    print(pl.selfIntersect())
    print(pl.getLongitud())
    print(pl.getLongitudParcial())
    print(pl.toGeoJSON())
    print(pl.toWKT())
    pl.setWKT('LINESTRING (30 10, 10 30, 40 40)')
    print(pl.toWKT())
    pl.setFromGeoJSON(
        '{"type":"LineString","coordinates": [[0.0,0.0],[10.0,0.0],[-10.0,10.0],[10.0,10.0],[-10.0,0.0],[0.0,0.0]]}'
    )
    print(pl.toWKT())
Exemplo n.º 16
0
 def setWKT(self, wkt):
     '''!
     '''
     self.__ptos = []
     coor = wkt.split('LINESTRING')[1]
     coor = coor.replace('(', '')
     coor = coor.replace(')', '')
     coor = coor.split(',')
     Puntos = []
     for i in coor:
         i = i.rstrip()
         i = i.split()
         Puntos.append(Punto2D(i[0], i[1]))
     self.setPoliLineaFromPuntos(Puntos)
Exemplo n.º 17
0
    def __init__(self, *args,**kwargs):
        '''!
        Constructor de la clase Punto2D.
        *args: La clase admite en el constructor dos o tres argumentos.\n
        Dos argumentos:\n
        args1: Punto Punto2D: Punto2D con el valor de las coordenadas X e Y.
        args2: Z float|int|str: Valor de la coordenada Z.\n
        Tres argumentos:\n
        args1 X float: Valor de la coordenada X.\n
        args2 Y float: Valor de la coordenada Y.\n
        args3 Z float: Valor de la coordenada Z.\n
        Parametros de tipo kwargs(para todos los constructores):\n
        kwargs negativos bool: Estado de la propiedad negativos.
        @exception: Se producira una excepción si se introducen más o menos argumentos de los admitidos por la clase.
        @exception: Se producira una excepción si no se reconoce el kwarg introducido.
        '''
        Negativos=None
        if len(kwargs)>0:
            for key in kwargs:
                if key.lower()=='negativos':
                    aux=kwargs[key]
                    self.setNegativos(aux)
                else:
                    raise Exception("El argumento: "+key+" no se reconoce")
        
        
        
        if len(args)==2:    #Punto2D,Z
            if isinstance(args[0], Punto2D):
                CoordenadaX = args[0].getX()
                CoordenadaY = args[0].getY()
                CoordenadaZ = args[1]
                if Negativos==None:
                    Negativos = args[0].getNegativos()
                    self.setNegativos(Negativos)
                # Inicializar la clase padre.
                Punto2D.__init__(self, CoordenadaX, CoordenadaY, negativos=Negativos)
                self.setZ(CoordenadaZ)
            else:
                raise Exception("Se esperaba un objeto de la clase Punto2D como primer argumento del constructor")
        elif len(args)==3:
            CoordenadaX = args[0]
            CoordenadaY = args[1]
            CoordenadaZ = args[2]
            if Negativos==None:
                Negativos = True  # Valor por defecto.
                self.setNegativos(Negativos)
            # Inicializar la clase padre.
            Punto2D.__init__(self, CoordenadaX, CoordenadaY, negativos=Negativos)
            self.setZ(CoordenadaZ)
        elif len(args)==0:
            Punto2D.__init__(self)
            #Constructor vacio.
            pass

        else:
            raise Exception("La clase Punto3D recibe 2 o 3 parametros como argumentos.\nSe han introducido: "+str(len(args))+" parametros.")
Exemplo n.º 18
0
    def setFromGeoJSON(self, geojson):
        '''!
        '''
        try:
            coors = loads(geojson)
        except Exception as e:
            raise Exception(e)

        if coors['type'] != 'LineString':
            raise Exception(
                "El GeoJSON introducido no corresponde con una línea")
        else:
            coor = coors['coordinates']
            puntos = []
            for i in coor:
                puntos.append(Punto2D(i[0], i[1]))
            self.setPoliLineaFromPuntos(puntos)
Exemplo n.º 19
0
 def toPunto2D(self):
     '''!
     @brief: Método que devuelve un objeto de la clase Punto2D, equivalente al Punto3D de la clase.
     @return Punto2D: Punto2D equivalente
     '''
     return Punto2D(self.getX(), self.getY(), negativos=self.getNegativos())
Exemplo n.º 20
0
    def __init__(self, *args, **kwargs):
        '''!
        Constructor de la clase Punto2D.
        *args: La clase admite en el constructor dos o tres argumentos.\n
        Dos argumentos:\n
        args1: Punto Punto2D: Punto2D con el valor de las coordenadas X e Y.
        args2: Z float|int|str: Valor de la coordenada Z.\n
        Tres argumentos:\n
        args1 X float: Valor de la coordenada X.\n
        args2 Y float: Valor de la coordenada Y.\n
        args3 Z float: Valor de la coordenada Z.\n
        Parametros de tipo kwargs(para todos los constructores):\n
        kwargs negativos bool: Estado de la propiedad negativos.
        @exception: Se producira una excepción si se introducen más o menos argumentos de los admitidos por la clase.
        @exception: Se producira una excepción si no se reconoce el kwarg introducido.
        '''
        Negativos = None
        if len(kwargs) > 0:
            for key in kwargs:
                if key.lower() == 'negativos':
                    aux = kwargs[key]
                    self.setNegativos(aux)
                else:
                    raise Exception("El argumento: " + key + " no se reconoce")

        if len(args) == 2:  #Punto2D,Z
            if isinstance(args[0], Punto2D):
                CoordenadaX = args[0].getX()
                CoordenadaY = args[0].getY()
                CoordenadaZ = args[1]
                if Negativos == None:
                    Negativos = args[0].getNegativos()
                    self.setNegativos(Negativos)
                # Inicializar la clase padre.
                Punto2D.__init__(self,
                                 CoordenadaX,
                                 CoordenadaY,
                                 negativos=Negativos)
                self.setZ(CoordenadaZ)
            else:
                raise Exception(
                    "Se esperaba un objeto de la clase Punto2D como primer argumento del constructor"
                )
        elif len(args) == 3:
            CoordenadaX = args[0]
            CoordenadaY = args[1]
            CoordenadaZ = args[2]
            if Negativos == None:
                Negativos = True  # Valor por defecto.
                self.setNegativos(Negativos)
            # Inicializar la clase padre.
            Punto2D.__init__(self,
                             CoordenadaX,
                             CoordenadaY,
                             negativos=Negativos)
            self.setZ(CoordenadaZ)
        elif len(args) == 0:
            Punto2D.__init__(self)
            #Constructor vacio.
            pass

        else:
            raise Exception(
                "La clase Punto3D recibe 2 o 3 parametros como argumentos.\nSe han introducido: "
                + str(len(args)) + " parametros.")
Exemplo n.º 21
0
 def toGeoJSON(self):
     '''!
     '''
     val=Punto2D.toGeoJSON(self).split('\n')
     val[2]='"coordinates":'+'['+str(self.getX())+','+str(self.getY())+','+str(self.__Z)+']'
     return '\n'.join(val)
Exemplo n.º 22
0
 def getNegativos(self):
     '''!
     @brief: Método que devuelve el valor actual de la propiedad negativos.
     @return bool: Estado de la propiedad Negativos.
     '''
     return Punto2D.getNegativos(self)
Exemplo n.º 23
0
 def getNegativos(self):
     '''!
     @brief: Método que devuelve el valor actual de la propiedad negativos.
     @return bool: Estado de la propiedad Negativos.
     '''
     return Punto2D.getNegativos(self)