Conversion de un archivo vectorial de puntos en un vectorial de línea usando un script de python (GRASS-QGIS)

En un artículo anterior se desarrolló un script de python para el ambiente de GRASS-QGIS que permitía obtener las coordenadas de los extremos de una línea y crear una nueva capa de puntos a partir de ellas. En este se va a convertir un vectorial de 15 puntos en vectorial de línea. Para ello, se va a apelar nuevamente a filtrar la salida de v.to.db con la función miembro split, sin embargo, por lo numeroso de los puntos existe la necesidad de recurrir a la nomenclatura matricial para sistematizar la salida y encontrar el algoritmo de “filtrado” que presenta, en este caso, dos tipos de separadores. Por otra parte, no se va a usar un archivo temporal sino uno escrito en disco generado por el propio script (pero que no es eliminado durante la ejecución), en el formato soportado por v.in.ascii, para producir directamente archivos vectoriales de líneas.

El script, py_Point2Line.py, se presenta a continuación:

#! /usr/bin/python
import os
import grass.script as grass

os.system("clear")

#numero de puntos

n = 15

#Obtencion de las coordenadas x,y,z para todos los puntos
puntos = grass.read_command("v.to.db", flags="p", map="cuenca_puntos", type="point", option="coor", units="meters", quiet="True")

#Definicion de la matriz
matriz = []

for i in range(n):
	matriz.append([])
	for j in range(3):
		matriz[i].append(None)

#Algoritmo para la individualizacion de las coordenadas
z=1
h=0
for i in range(n):
	h=h+3
	for j in range(3):
		matriz[i][j]=(puntos.split("|")[z])
		if (j==2):
			temp=(puntos.split("|")[h])
			matriz[i][j]=float(temp.split("\n")[0])
		z=z+1

#Impresion, por verificacion, de la matriz
for i in range(n):
	for j in range(3):
		print matriz[i][j],
	print 	

pfile = open('archivo1','w')

#Impresion del archivo, por defecto, en home de usuario
pfile.write("VERTI:\nL " + str(n) + " 1\n")

for i in range(n):
	for j in range(3):
		pfile.write(str(matriz[i][j],)+" ")
	pfile.write("\n") 	

pfile.write("1 1\n")

pfile.close() #Hay que cerrar el archivo para que pueda funcionar v.in.ascii!!!!

grass.run_command("v.in.ascii", format="standard", input="/home/zeito/archivo1", out="cuenca_linea", quiet="True")

En el no se intenta ninguna generalización sino que se utiliza para transformar un vectorial de 15 puntos, cuenca_puntos, en el vectorial tipo línea cuenca_linea ejecutado en cónsola de GRASS-QGIS con python py_Point2Line.py. El resultado se encuentra en la siguiente imagen:

La salida que aparece en cónsola de GRASS es simplemente para verificar que el filtrado e individualización de las coordenadas con split, matriz 15×3, se llevó a cabo de la manera adecuada.

Esta entrada fue publicada en Código Python, GRASS, QGIS, SIG, Software Libre. Guarda el enlace permanente.

Una respuesta a Conversion de un archivo vectorial de puntos en un vectorial de línea usando un script de python (GRASS-QGIS)

  1. Pingback: Manejo de arrays y matrices en python |

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

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