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
5 comentarios
  1. Pingback: masquesig

  2. Amanda dijo:

    Buenas, soy una estudiante de la uci que para la tesis tengo que hacer un componente que genere el área de influencia en un SIG, quisiera saber si me pueden dar alguna documentacion respecto a este tema, me sería de gran ayuda

Responder a Óscar Martínez Cancelar respuesta

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 )

Google photo

Estás comentando usando tu cuenta de Google. 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 )

Conectando a %s

A %d blogueros les gusta esto: