Scripting en gvSIG: Coordenadas de los extremos de líneas en la tabla

linexyEl otro día un compañero en las listas de usuarios de gvsig de nos planteó una necesidad que tenía: añadir a la tabla de datos 4 campos nuevos que contuvieran las coordenadas X, Y de inicio y fin de las lineas que tenía su shape.

La solución sin usar programación la podéis seguir en dos emails[1] [2], explicada gracias a Gustavo Agüero Córdoba . 

Me parecía un buen ejemplo sencillo para exponer y aquí lo tenéis, simplemente tenéis que tener la capa activa donde queréis realizar los cambios,  y ejecutarlo. Sencillo pero que te puede ser muy útil, o servirte de base para algo que utilices.

import gvsig
from geom import *

def main():
    """Obtiene los vertices finales de 
        lineas y los agrega a tabla"""
    #Nuevo nombre para los campos X,Y
    campoX = "X_final"
    campoY = "Y_final"
    campoXi = "X_inicial"
    campoYi = "Y_inicial"
    layer = gvsig.currentLayer()
    
    schema = layer.getSchema()
    schema.modify()
    schema.append(campoXi,"DOUBLE", 30)
    schema.append(campoYi,"DOUBLE", 30)
    schema.append(campoX, "DOUBLE", 30)
    schema.append(campoY, "DOUBLE", 30)
    layer.edit()
    layer.updateSchema(schema)
    layer.commit()
    features = layer.features()
    for line in features:
        geom = line.geometry()
        vertex = geom.getVertex((geom.numVertices-1))
        vertexi = geom.getVertex(0)
        x,y = vertex.getX(), vertex.getY()
        xi,yi = vertexi.getX(), vertexi.getY()
        line.edit()
        line.set(campoX, x)
        line.set(campoY, y)
        line.set(campoXi, xi)
        line.set(campoYi, yi)
        layer.update(line)
        
    layer.commit()

 

3 comentarios
  1. Lisbeth dijo:

    Hola esta bueno este script, tengo una pregunta esto no tiene algún inconveniente si la capa lineas tiene tramos pequeños, menor a 50 m por ejem?.

    • Hola Lisbeth, no deberías de tener ningún problema con tramos de 50 metros. Hablando de precisiones, me parece que en la tabla de atributos solo muestra tres decimales, pero lo almacena con algo más de precisión esas coordenadas. Cuando tenga algo más de tiempo lo miraré mejor. Por otros problemas, por muy pequeñas que sean las líneas, no debería de saltar ningún error.

      De todas formas si te da algún problema me puedes escribir de nuevo por aquí o al email masquesig@gmail.com y lo miramos.

      Un saludo y gracias por pasarte

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: