Manejo de geometrías.

Una geometría son conjuntos de posiciones directas en un sistema de coordenadas de referencia particular. Una geometría puede ser considerado como un conjunto infinito de puntos que satisface las interfaces de operación de ajuste para un conjunto de posiciones directas.
Un objeto geométrico será una combinación de una geometría de coordenadas y un sistema de coordenadas de referencia. En todas las operaciones, todos los cálculos geométricos se hace en el sistema de coordenadas de referencia del primer objeto geométrico visitada, que normalmente es el objeto cuya operación está siendo invocado. Objetos devueltos deberán estar en el sistema de coordenadas de referencia en el que los cálculos se hacen a menos que se especifique lo contrario.

El concepto de tipo y subtipo

En gvSIG, el tipo únicamente hace referencia a la clase de objeto geomético dependiendo de sus características geométicas, pero no indica si la geometría es en 2 dimensiones o en 3 dimensiones, o si soporta coordenada M o no la soporta. Para ello se ha creado el concepto de subtipo que sirve para indicar la dimensión de la geometría.

Los tipos de geometrías actualmente soportados por gvSIG se encuentran definidos en TYPES y son:
Los subtipos de gvSIG se encuentran definidos en SUBTYPES y son

Creación de geometrías

Dentro del entorno de scripting en gvSIG, se ha creado un módulo, geom.py, que simplifica algunas de las operaciones más habituales con las geometrías.
Para crear una geometría debemos importar en nuestro script el módulo 'geom' e invocar a la función createGeometry indicando el tipo y el subtipo de la nueva geometría.

from geom import *
def main():
  geometry = createGeometry(POINT, D2) 
La geometría así creada es una geometría de tipo punto y subtipo 2d vacía.

Geometría de tipo Punto. Función createPoint

Podemos crear una geometría de tipo punto (POINT) mediante la función createPoint del módulo geom que devuelve una geometría y cuya sintaxis es:
    createPoint([x, y][, subtype])
Los métodos más habituales de una geometría de tipo punto son:
Supongamos que tenemos una geometría de tipo punto y queremos obtener sus coordenadas "x" e "y" para poder crear otra geometría de tipo pùnto con esos valores.
    from geom import *
    def main():
      # codigo ...
      x = point.getX()
      y = point.getY()
      newPoint = createPoint(x,y)

Para editar o recuperar el resto de valores de las otras dimensiones hay que utilizar los métodos genéricos setCoordinateAt y getCoordinateAt.
Por ejemplo, para crear un punto en 3 dimensiones cuyas coordenadas sean 1,1,5 hay que ejecutar el siguiente código:
    point = createGeometry(POINT, D3)
    point.setCoordinateAt(0, 1)
    point.setCoordinateAt(1, 1)
    point.setCoordinateAt(2, 5)

Otra opción podría ser hacerlo utilizando los métodos setX() y setY() de la geometría y el método setCoordinateAt(dimension, value) y el punto obtenido sería el mismo:
    point = createGeometry(POINT, D3)
    point.setX(1)
    point.setY(1)
    point.setCoordinateAt(2, 5)

Para obtener información más completa sobre los métodos de una geometría de tipo punto, puede  consultarse la documentación de la geometría de tipo Punto

Geometrías de tipo Polygon. Función createPolygon

La función createPolygon del módulo geom, nos permite crear una geometría de tipo polígono (POLYGON) de forma rápida.
La sintaxis de la función es
    createPolygon([subtype])

Los métodos comunes de estas geometrías son:

Un ejemplo, el siguiente código crea una geometría de tipo polígono, a la que añade 4 vértices.
    from geom import *
    def main():
      polygon = createPolygon(D2M)
      x = (1, 1, 5, 5)
      y = (1, 5, 5, 1)
      points = [createPoint(p[0], p[1]) for p in zip(x, y)]
      for point in points:
        polygon.addVertex(point)
      polygon.closePrimitive()
    

Geometría de tipo Línea. Función createLine

La función createLine del módulo geom, nos permite crear una geometría de tipo línea de forma rápida.
La sintaxis de la función es
    createLine([subtype])
Los métodos comunes de estas geometrías son:

Geometría de tipo Multipunto. Función createMultiPoint

Las geometrías MULTIPOINT, son geometrías que contienen a su vez una colección de geometrías de tipo POINT.
Podemos crear una geometría de tipo MULTIPOINT invocando a la función createMultiPoint, indicando el subtipo de geometría que queremos crear.
    createMultiPoint([subtype])
El siguiente código crea una geometría de tipo MULTIPOINT y añade 6 geometrías de tipo POINT
    from geom import *
    def main():
      multipoint = createMultiPoint(subtype=D2)
      x = (1, 1, 5, 5, 10, 0)
      y = (1, 5, 5, 1, 10, 10)
      points = [createPoint(p[0], p[1]) for p in zip(x, y)]
      for point in points:
        multipoint.addPoint(point)
También pueden añadirse puntos a la geometría MULTIPOINT pasando como parámetros dos listas, una con las coordenadas X y otra con las coordenadas Y de los puntos que van a formar la multigeometría.
    from geom import *
    def main():
      multipoint = createMultiPoint(subtype=D2)
      x = (1, 1, 5, 5, 10, 0)
      y = (1, 5, 5, 1, 10, 10)
      multipoint.setPoints(x, y)

Los métodos de la clase MULTIPOINT son:
­

Geometría de tipo Multilínea. Función createMultiLine

Las geometrías MULTILINE, son geometrías que contienen a su vez una colección de geometrías de tipo LINE.
Podemos crear una geometría de tipo MULTILINE invocando a la función createMultiLine, indicando el subtipo de geometría que queremos crear.
    createMultiLine([subtype])
Los métodos de la clase MULTILINE son:
­

Geometría de tipo Multipolígono. Función createMultiPolygon

Las geometrías MULTIPOLYGON, son geometrías que contienen a su vez una colección de geometrías de tipo POLYGON.
Podemos crear una geometría de tipo MULTIPOLYGON invocando a la función createMultiPolygon, indicando el subtipo de geometría que queremos crear.
    createMultiPolygon([subtype])
Los métodos de la clase MULTIPOLYGON son:

Operaciones con geometrías

para mas información puede consultarse el API de geometrías de gvSIG