6 votos

La medición de la Sinuosidad de Rutas de senderismo

Actualmente estoy trabajando en un proyecto que estudia el movimiento de los consumidores a través de diferentes tipos de espacios de venta en Asia Central – es decir, bazares frente a los supermercados. He equipado a decenas de compradores con los perseguidores de GPS de que su registro de movimientos a lo largo de estos diferentes espacios de venta, y ahora estoy trabajando en el análisis de los datos resultantes.

Estoy interesado principalmente en la comparación global de las distancias a pie y caminando a velocidades bastante fácil. Pero también he notado el bazar de las rutas son muy irregulares, con compradores de tejer de esta manera y que a través de la concurrida puestos, mientras que el supermercado pistas son muy recta, eficaz y coherente entre los compradores. Así, me gustaría que para cuantificar la sinuosidad o la eficiencia de estas rutas a pie – es decir, la frecuencia con la que los compradores de turno y/o dar marcha atrás.

No estoy seguro de cómo el enfoque de este análisis – y mucho menos lograr en QGIS. Debo definir esta "ordenación del territorio de la eficiencia" índice de la relación de la distancia total recorrida general de grados de rotación, o algo? O debo usar el simple río sinuosidad de cálculo (directo distancia vs curvilíneo de longitud) y, si es así, ¿cómo debo determinar los puntos de control crítico? Cualquier consejo se agradece.

3voto

user47964 Puntos 16

Esto no va a resolver todos sus problemas, pero es un buen comienzo. Este script en python 2 funciona con un archivo csv con tres campos: id, latitud, longitud. Usted puede también añadir tiempo de campo y aplicar los códigos para calcular la velocidad media. Calcula la distancia absoluta recorrido(diferencia entre el último y el primer punto), también se calcula la suma de la distancia a todos los puntos, y cómo muchas veces caminó hacia el norte, sur, este y oeste. El algoritmo es muy sencillo, pero se puede mejorar.

import csv
from math import sqrt     

class CSVFile:
    csvfile=''
    def openCSV(self, filename, delimitador):
        self.csvfile = csv.reader(open(filename), delimiter= delimitador)   
    def values(self):
         matrix= []
        for i in self.csvfile:
            matrix.append( [ float(i[0]), float(i[1]), float(i[2])] )
        return(matrix)

class Distance:
    def total_walked(self, matrix):
        distX = 0.
        distY = 0.
        x_ant = 0.
        y_ant = 0.
        ## if walked north or south, east or west this is relative,
        ## if analyzed move is in south hemisphere for example, the
        ## walked_south will be walked_north and vice-versa becouse
        ## south latitude coordinates are negative.
        ## if the moves cross equatorial line these values will be worthless.
        walked_east = 0
        walked_west = 0
        walked_north = 0
        walked_south = 0
        for i in matrix:            
            if(x_ant != 0):
                if (i[2]-x_ant > 0):                    
                    distX= distX + (i[2] - x_ant)
                    walked_east= walked_east + 1
                if(i[2] -x_ant < 0 ):
                    distX= distX - (i[2] - x_ant)
                    walked_west = walked_west + 1
            x_ant = i[2]
            if (y_ant != 0):
                if (i[1] - y_ant > 0):
                    distY = distY+ (i[1] - y_ant)
                    walked_north = walked_north + 1
                if(i[1] - y_ant < 0 ):
                   distY = distY - (i[1] - y_ant)
                    walked_south = walked_south + 1 
            y_ant = i[1]
            print "Walked Norte %s times" % walked_north
            print "Walked South %s times" % walked_south 
            print "Walked East %s times" % walked_east 
            print "Walked West %s times" % walked_west 
            print "Total distance X walked: %.2f" % distX
            print "Total distance Y walked: %.2f" % distY
            print "Total distance: %.2f" % sqrt(pow(distX,2)+ pow(distY,2)) 

    def total_distance(self, matrix):
        num = len(matrix)-1
        distanceY = matrix[num][1] - matrix[0][1]
        distanceX = matrix[num][2] - matrix[0][2]
        print "Absolute Distance Y: %s" % distanceY
        print "Absolute Distance X: %s" % distanceX
        print "Total Absolute Distance: %s" % sqrt(pow(distanceX,2)+ pow(distanceY,2))

matrix = [] 
delimiter = ','
print "Type path of csv file:"
path = raw_input()
csv_file = CSVFile()
csv_file.openCSV(path, delimiter)
matrix = csv_file.values()
calculum = Distance()
calculum.total_walked(matrix)
calculum.total_distance(matrix) 

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X