Conversion de un archivo vectorial de puntos en un vectorial tipo polígono usando un script de python (GRASS-QGIS)

En el artículo anterior se procedió a la conversión de un archivo vectorial de puntos en un vectorial de línea usando un script de python (GRASS-QGIS). En éste también se usará python pero para convertir el vectorial de puntos (cuenca_puntos) directamente en un vectorial tipo polígono (cuenca_area). No se usará un archivo temporal grabado al disco sino en modo de ejecución del programa. Adicionalmente, también se producirá el vectorial de puntos correspondiente al centroide.

Este es el script propuesto:

#! /usr/bin/env python
import os
from grass.script import core as grass
from grass.script import vector as grass

os.system("clear")

#Diccionario con la info del vectorial donde el numero de puntos es 'points'
info = grass.vector_info_topo('cuenca_puntos') 
                                          
n = info['points'] #numero de puntos 

#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 individualización de 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
print "Puntos (x,y,z)"

for i in range(n):
	for j in range(3):
		print matriz[i][j],
	print 	

#Calculo del centroide

sumax = sumay = sumaz = 0.

for i in range(n):
	sumax = sumax + float(matriz[i][0])
	sumay = sumay + float(matriz[i][1])
	sumaz = sumaz + float(matriz[i][2])

averagex = sumax/n
averagey = sumay/n
averagez = sumaz/n

print "\nCentroide\n", averagex, averagey, averagez

tempfile = grass.tempfile() #Define el archivo temporal

pfile2=open(tempfile, 'w')  #Abre el archivo temporal

tempfile2 = grass.tempfile() #Define el archivo temporal

pfile3=open(tempfile2, 'w')  #Abre el archivo temporal

#Imprime archivo temporal para el vectorial tipo poligono

print >> pfile2, "VERTI:\nB ", str(n)

for i in range(n):
	print >> pfile2, str(matriz[i][0]), str(matriz[i][1]), str(matriz[i][2])

print >> pfile2, "C 1 1"

print >> pfile2, averagex, averagey, averagez

print >> pfile2, "1 1"

#Imprime archivo temporal para el centroide

print >> pfile3, "VERTI:\nP 1 1"

print >> pfile3, averagex, averagey, averagez

print >> pfile3, "1 1"

pfile2.close() #Cierra el archivo temporal
pfile3.close() #Cierra el archivo temporal

grass.run_command("v.in.ascii", format="standard", input=tempfile, out="cuenca_area", quiet="True")

grass.run_command("v.in.ascii", format="standard", input=tempfile2, out="centroide", quiet="True")

Este es el resultado de la ejecución con python py_puntos2.py en cónsola de GRASS-QGIS:

En la imagen de la cónsola de GRASS se imprimieron, sólo por verificación, las coordenadas de los 15 puntos y el centroide.

Mas información aquí: http://grass.osgeo.org/programming6/pythonlib.html

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 tipo polígono usando un script de python (GRASS-QGIS)

  1. Pingback: Script de python para generar y rotar rectángulos a partir de puntos en QGIS-GRASS |

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