Scripting en gvSIG: Importar CSV como capa y crear geometría

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.
 #Agrega 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 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
2 comentarios
  1. Pingback: masquesig

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: