Cambiar la categoría de un vectorial de partes sencillas con una sola categoría: grass.script en python

Cuando se tiene una polilínea multiparte la tabla atributiva de la misma sólo muestra el valor de una categoría. Cuando se ejecuta un v.split a 2 vértices se obtiene un vectorial de partes sencillas que corresponde a todos sus segmentos de línea. Sin embargo, la categoría es única para todas sus partes y esto podría ser un problema a la hora de modificar valores en campos basados en categorías diferentes. Después de tratar de ejecutar las modificaciones de categoría, por separado, con los módulos v.category (con las opciones del y add) y la recomposición de la polilínea con v.build.polyline y la opción de categorías múltiples, los resultados fueron infructuosos. Por tanto, se decidió la modificación de las categorías a partir de una copia temporal del vectorial en formato ascii con v.out.ascii.

El archivo ascii de partes sencillas tiene un encabezado de texto de 10 líneas y a partir de allí las modificaciones sólo son necesarias a partir de la línea 17 (categoría 2) cada 4 de ellas. La individualización de las líneas de texto se logra con split y el delimitador “\n”. Después de modificadas las líneas, se copian a un archivo temporal el cual se recompone a un vectorial de partes sencillas con categorías diferentes mediante v.in.ascii con eliminación del temporal.

El código empleado se encuentra a continuación y permite dividir en segmentos el vectorial multiparte río al partes sencillas rio_split con una sóla categoría en la tabla atributiva y lo recompone en el vectorial verizona5 con múltiples categorías.

#! /usr/bin/env python
# -*- coding: utf-8

import grass.script as grass

from os import system

system("clear")

grass.run_command("v.split",
					input="rio",
					output="rio_split",
					vertices="2",
					quiet="True",
					overwrite="True")

puntos=grass.read_command("v.out.ascii", 
							input="rio_split", 
							format="standard", 
							quiet="True")

puntos=puntos.split("\n")

n=len(puntos)#Determina numero de lineas del arreglo puntos

#inicia contadores para modificar lineas del archivo ascii
h=0
j=2

#El primer valor a modificar esta en posicion 17 cada 4 valores
for i in range(0,len(puntos)):
	if i==17+h:
		puntos[i]="1 "+str(j) #modifica la categoria del vectorial
		h+=4
		j+=1

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

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

#Imprime archivo temporal para el vectorial tipo linea

for i in range(0,len(puntos)):
	print >> pfile, str(puntos[i])

pfile.close()

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

system ("rm " + tempfile)

Como todo esto se ejecutó en cónsola de bash, para verificar los cambios en los vectoriales éstos se visualizaron en QGIS; tal como se encuentra en la siguiente imagen:

La tabla atributiva de verizona5 refleja la obtención de un vectorial de categorías diferentes; tal como se deseaba.

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

2 respuestas a Cambiar la categoría de un vectorial de partes sencillas con una sola categoría: grass.script en python

  1. Pingback: Cambiar la categoría de un vectorial de partes sencillas con una sola categoría: grass.script en python | Geoprocessing - Geoprocessamento | Scoop.it

  2. Pingback: Script de python para determinar el índice de alargamiento de una Cuenca Hidrográfica |

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