#Este script sirve para añadir un nuevo campo a una capa1, de otra capa2, #y el valor de ese campo de cada entidad de la capa1 sera el de la entidad mas cercana de la capa2. from gvsig import * from commonsdialog import * from geom import * def main(*args): confirmDialog ( u"Este script añade un campo de la CAPA2 a la CAPA1 con un criterio de cercanía:", "OK", 0) #Pedir ruta del fichero shape al usuario ruta1 = openFileDialog("Abrir capa1","D:/gvsig/") #Abrir fichero con la opcion: layer = loadShapeFile(“ruta de la capa”) capa1 = list(ruta1)[0] layer1 = loadShapeFile(capa1) #Acceder al esquema de la capa esquema1 = layer1.getSchema() atributos1 = esquema1.getAttrNames() print "el nombre de la capa1 es:", layer1.name print "Esquema de la capa1 es: ", atributos1 msgbox(str(atributos1), "Los campos de la CAPA 1 son:", 1) #Pedir ruta del fichero shape al usuario ruta2 = openFileDialog("Abrir capa2","D:/gvsig/") #Abrir fichero con la opcion: layer = loadShapeFile(“ruta de la capa”) capa2 = list(ruta2)[0] layer2 = loadShapeFile(capa2) #Acceder al esquema de la capa esquema2 = layer2.getSchema() atributos2 = esquema2.getAttrNames() print "el nombre de la capa2 es:", layer2.name print "Esquema de la capa2 es: ", atributos2 msgbox(str(atributos2), "Los campos de la CAPA2 son:", 1) #Mostrar informacion de cada campo, tipo de dato y precision for nombreAtributo2 in atributos2: atributo2 = esquema2.get(nombreAtributo2) print atributo2.name, atributo2.dataTypeName, atributo2.precision #Pedir nombre del campo nuevo campo = inputbox(u"¿Cual es el campo que quieres añadir?") #Modificar la estructura del esquema esquemaNuevo= createSchema(layer1.getSchema()) #Actualizar la capa con el nuevo esquema esquemaNuevo.append(campo, "STRING", size=20) layer1.edit() layer1.updateSchema(esquemaNuevo) Maximo=100000000000000000 for l1 in layer1.features(): l1.edit() for l2 in layer2.features(): velo = l2.geometry().distance(l1.geometry()) if velo < Maximo: Maximo = velo valor = l2.get(campo) l1.set(campo,valor) layer1.update(l1) layer1.commit() #Volver a mostrar la informacion de la capa print "El esquema nuevo es:", layer1.getSchema().getAttrNames()