jueves, 15 de agosto de 2013

Cambiamos de dirección

Nos vamos a wordpress!

http://masquesig.wordpress.com/

TEDx: Darle sentido a los mapas



El diseñador de mapas Aris Venetikidis está fascinado por los mapas que dibujamos en nuestra mente cuando nos movemos por la ciudad –no tanto como mapas de calles, sino como esquemas o diagramas, imágenes abstractas de las relaciones entre las partes. ¿Cómo podemos aprender de estos mapas mentales para hacer mejores mapas reales? Como caso de prueba, rehace el famoso mapa de autobuses de Dublín.

Scripting en gvSIG: csv y buffer



Vamos a realizar una pequeña modificación a nuestro script anterior, en vez de crear una geometría de punto, lo que haremos será marcar el área de influencia (buffer) de cada entidad. El área de influencia se calcula a partir de la geometría y con una distancia que nosotros determinamos de la forma:

geometria.buffer(distancia)

Para que funcione este script modicaremos la nueva capa newLayer como tipo de geometria "SURFACE"  para que permita almacenar superficies.

 newLayer = createShape( schema, 
   ruta, 
   CRS = crs, 
   geometryType = SURFACE
)

Añadiremos la linea "buf" para dar el valor de distancia que en este caso lo tomamos de la columna [4] o "Intensidad". Al añadir la geometría punto a la entidad, le añadimos el .buffer() de la forma que quedaría así:

buf = float(values[4])
values[indice] = punto.buffer(buf)

De esta forma ejecutaremos el script y lo que obtendremos es una nueva capa de tipo SURFACE con el área de influencia alrededor de cada punto.

Más adelante realizaremos un script independiente que calcule el buffer de las entidades que seleccionemos de una capa ya creada.

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

domingo, 28 de julio de 2013

Scripting en gvSIG: getlayer

Publicaré trozos de programación del tipo: explicación del .getlayer en gvSig

Ejemplo 1:
#Documentos - Vistas - getLayer - 1
#Librerias necesarias

from gvsig import *


def main():
    """

    Buscar una capa determinada y contar el numero de entidades
    """
    #Accedemos a la vista PARQUES de nuestro proyecto
    #Podriamos pedir mediante un inputbox la vista que queremos analizar

    vista = currentProject().getView("parques")
    #Accedemos a la capa PARQUES.SHP cargada en la vista
    #Si no la encuentra devuelve el valor None

    capa = vista.getLayer("PARQUES.SHP")
    #Controlamos que exista la capa PARQUES en esa vista
    if capa == None:
        print "Capa no encontrada"
        return
    else: print "Capa encontrada!"
    #Hacemos un recuento del numero de entidades que contiene
    n = capa.features().getCount()
    #Sacamos el resultado por consola
    print "La capa dispone de " + str(n) + " entidades"


Hola!

Publicaré en este blog articulos sobre SIGs en general, programación, principalmente gvsig, y otras cosas útiles relacionadas con el webmapping y la maps revolution.

Twitter: @masquesig 
Email: masquesig@gmail.com