miércoles, 14 de agosto de 2013
Scripting en gvSIG: Importar CSV y adjuntar la geometría a cada entidad
Teniendo un .csv con nuestros datos crearemos una nueva capa con estas entidades, y utilizando el valor de sus columnas X e Y crearemos una geometría que asociaremos a cada entidad.
creaCapaCsvPuntosRecorrido.py:
from gvsig import *
from commonsdialog import *
from geom import *
import csv
import os.path
def main():
"""Crea Capa de puntos desde un CSV cogiendo como coordenadas las
dos ultimas columnas X e Y
"""
#Introducir la dirección donde se encuentra el archivo .csv
rpath = inputbox("Ruta del csv", "Seleccione Parth",QUESTION)
if not rpath:
msgbox("Introduzca la ruta al csv", "Error", FORBIDEN)
return
#Abre el fichero en modo de lectura
input = open(rpath, 'r')
#var reader coge los datos del .csv
reader = csv.reader(input)
#Variables auxiliares
c = 2
indice = 0
#Creamos un esquema vacio para la capa, y valores necesarios
# para crear la capa dentro del for
schema = createSchema()
crs = currentProject().getProjectionCode()
capa = "csv_layer14.shp"
ruta1 = "C:\gvsig\\"
ruta = ruta1 + capa
#For pasando por todas las lineas del csv. para agregar a la capa nueva
for row in reader:
#Primera linea la coge como esquema (solo se ejecutará una vez)
if c == 2:
#Añade todas las columnas
for i in row:
schema.append(i,"STRING", size=10, default=0)
#Añadimos la geometria
schema.append("GEOMETRY", "GEOMETRY")
#Creamos la capa
newLayer = createShape( schema, ruta, CRS = crs, geometryType = POINT)
c -= 1
#Preparamos los valores para añadir los datos a continuacion en el else
values = dict()
esquema = schema.getCopy()
#Lineas en adelante como datos
else:
#Añadimos los datos
for i in row:
values[indice]=i
indice += 1
#Creamos la geometria para cada punto cogiendo las columnas
#Las columnas X,Y son las dos últimas, usaremos el indice.
x = indice - 2
y = indice - 1
punto = createPoint(int(values[x]),int(values[y]))
buf = float(values[4])
values[indice] = punto
newLayer.append(values)
indice = 0
#Añadimos y guardamos la capa.
currentView().addLayer(newLayer)
newLayer.commit()
input.close()
Ejemplo de csv que utilizaremos en este ejemplo y en los siguientes:
tornados.csv
ID,CODIGO,NOMBRE,FECHA,INTENSIDAD,VELOCIDAD,X,Y
1,X159,Gelir,23/06/09,5,30,0,0
2,X295,Ferla,24/08/09,4,20,10,15
3,X820,Vurla,25/10/10,7,35,23,44
4,X810,Bastir,26/04/11,5,24,25,38
5,X890,Cerstart,27/06/12,"3.5",15,32,14
6,X183,Xer,28/06/11,"8.1",35,65,73
7,X105,Gagmor,01/09/10,"7.5",17,13,5
8,X109,Tristi,30/06/09,"6.4",28,98,15
9,X852,Marme,20/07/11,"5.3",20,83,45
Síguenos en: @masquesig
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario