Determinación de la distancia máxima desde el centroide a los vértices de un polígono mediante Python con GRASS script

La determinación de la distancia máxima desde el centroide a los vértices de un shapefile tipo polígono es factible mediante Python con GRASS script. Para ello se usa la información que genera v.out.ascii asignada a una variable cuyo split se hace en primer término por salto de línea (“\n”). En la línea 11 (arreglo de strings con posición 10) se tiene información del número de vértices del polígono (nro_puntos) y las líneas desde la 12 hasta la 12 más nro_puntos corresponden a las coordenadas de todos los vértices del polígono. Dos posiciones más abajo en la salida de v.out.ascii se encuentran las coordenadas del centroide. Después de asignar las coordenadas x,y de los vértices del polígono en sus respectivos arreglos, es fácil estimar mediante la fórmula de la distancia, la longitud existente entre el centroide y cada uno de los vértices y de este nuevo arreglo seleccionar el máximo sin el uso previo de algoritmos de ordenación [hay una función propia para ello, max(), sin necesidad de cargar previamente ninguna librería].

El código propuesto fue el siguiente:

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

import os
from math import sqrt
import grass.script as grass

os.system ("clear")

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

puntos=puntos.split("\n")

#En la posición [10][2] está el número de puntos del vectorial tipo polígono
#con split por espacio simple
nro_puntos = puntos[10].split(" ")

n = int(nro_puntos[2])

tope=11+n

#Se asignan los arreglos para coordenadas x, y, distancia
x=range(tope)
y=range(tope)
d=range(int(nro_puntos[2]))

#Se producen los arreglos de coordenadas x,y de los vértices del polígono
for i in range(11,tope):
	coor = puntos[i].split(" ")
	x[i] = float(coor[1])
	y[i] = float(coor[2])

#Se producen las coordenadas del centroide
coor_cent = puntos[tope+1].split(" ")

x_cent = float(coor_cent[1])
y_cent = float(coor_cent[2])

#Se redimensionan los arreglos de x, y para que comiencen desde cero
x=x[11:tope]
y=y[11:tope]

#Aplicación de la fórmula de la distancia a todos los vértices desde el centroide
for i in range(int(nro_puntos[2])):
	d[i] = sqrt((x_cent-x[i])*(x_cent-x[i])+(y_cent-y[i])*(y_cent-y[i]))

dist_max = max(d)

print "La distancia desde el centroide al vértice más alejado es:\n\ndistancia máxima = %.2f" % dist_max, " m"

que usé con el vectorial cuenca de mi tradicional espacio de trabajo para pruebas denominado tiznados. La ejecución del script en cónsola, sin necesidad de abrir GRASS ni QGIS, fue:

La distancia desde el centroide al vértice más alejado es:

distancia máxima = 56033.42  m

Para verificar si el script estaba trabajando de manera adecuada se cargaron en QGIS los shapefiles necesarios para medir las distancias con la herramienta correspondiente. En la imagen siguiente se marcó la que coincidió exactamente con el resultado. El script funcionó de manera satisfactoria.

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

3 respuestas a Determinación de la distancia máxima desde el centroide a los vértices de un polígono mediante Python con GRASS script

  1. arnoldfiarn dijo:

    Gran aporte.

  2. Pingback: Generación de vectorial de línea a partir del centroide y vértice más alejado de polígono con Python y GRASS-Script |

  3. Pingback: Desarrollo Geoespacial con Python en Linux Debian |

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