Continuando 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
Deja una respuesta