Scripting en gvSIG: 02 Suavizado – Unir puntos según su ID en un polígono

suavizado02unirpuntosporID2Continuando con el grupo de scripts para Suavizado de polígonos, después de haber creado una capa disolviendo el polígono en puntos además de añadirle los puntos medios extras que necesitaremos para suavizarlo, ahora volvemos a unirlos en un polígono. Estos pasos son para que los scripts se puedan repasar por separado o añadir otros scripts a los pasos intermedios.

Ahora con este scripts unirPuntosPorID, lo que haremos es con los puntos que vienen con un campo ID y en orden de posición, unirlos de nuevo creando nuevos polígonos.

El resultado final volverá a ser un polígono como el inicial, tan solo que contendrá los puntos medios que hemos creado en el anterior script. Este script lo volveremos a reutilizar para acabar los pasos a seguir para conseguir el suavizado de polígonos.

Por ejemplo, una de las pegas del script es la forma de unir los polígonos, lo hace en el orden que están en la tabla, si queremos modificar un punto de lugar no habría problema para luego volver a crear el polígono, pero si queremos añadir uno nuevo tendríamos que ponerlo en su lugar correspondiente y no podríamos. Una forma de hacerlo sería modificando el script y añadiendo otro campo que determinara el orden de ellos.


from gvsig import *
from geom import *

def main():
    """Unir puntos en un polígono agrupandolos por ID"""
    #INPUT: capa de puntos con una ID y en orden
    #OUTPUT: capa, poligonos unidos con el campo ID

    #Numero de poligonos
    features = currentLayer().features()
    listaMax = list()
    for feature in features:
        listaMax.append(feature.get("ID"))

    output = crearShape()
    rango = range(int(max(listaMax))+1)
    print rango
    #Vamos añadiendo los puntos de mismo valor a un pol
    for n in rango:
        #Hacemos un filtro exp..
        exp = "ID =" + str(n)
        #...de las entidades con la misma ID
        features = currentLayer().features(exp)
        #Por si alguna id no existe
        if features.getCount()==0: continue
        #Creamos geometria
        geom = createGeometry(SURFACE)
        values = dict()
        values["ID"] = n
        #Añadimos todos sus vertices en orden
        for feature in features:
            geom.addVertex(feature.geometry())
        print "end",n
        values["GEOMETRY"] = geom
        output.append(values)
    output.commit()
    currentView().addLayer(output)

def crearShape():
    ruta = "C:/gvsig/mdtarti/S-Unir-01.shp"
    CRS = currentLayer().getProjectionCode()
    schema = createSchema()
    schema.append("GEOMETRY", "GEOMETRY")
    schema.append("ID", "INTEGER", size = 10)
    output = createShape( schema, ruta, CRS = CRS,
        geometryType=POLYGON)
    return output

suavizado02unirpuntosporID3suavizado02unirpuntosporID0 suavizado02unirpuntosporID1

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: