jueves, 17 de octubre de 2013

Programa MapBasic para estimacion de distancias promedio

Antes que hablar de distancia media, cabe mencionar que la media es un promedio, lo mismo que la mediana y la moda. Un promedio es un estadígrafo que me da una aproximación de una sola variable al conjunto. Así, promedio no es sinónimo de media. La distancia promedio es un indicador de concentración.

La distancia media se define como el promedio de todos los promedios de distancias de cada punto contra los otros. En términos numéricos:


Si P es un conjunto de puntos p1,p2…pn, tales que existen en un plano de tal modo que hay una xi y una yi tales que son coordenadas de pi, entonces la distancia promedio de pi a P será para un j



Y la distancia promedio total será





La distancia promedio nos dará una idea, en un espacio isomorfo de que puntos tienen la cercanía óptima en el conjunto. Tiene diversas aplicaciones. Por ejemplo, si los puntos son escuelas, y se desea que una de las escuelas sea un centro de zona, la que tenga menor distancia promedio será aquella en la que la suma de los viajes es menor.



En el cálculo de la distancia promedio hay dos opciones, contar o no la distancia de cada punto contra si mismo. Normalmente no se cuenta.
El algoritmo para programación geográfica en MapBasic es el que sigue. Algoritmos muy similares pueden escribirse en Avenue, Autolisp u otros lenguajes de objetos geográficos. Para correrlo debe haber una tabla de puntos en MapInfo que contengan una columna llamada DistanciaPromAlRest donde se almacenarán los datos de distancia promedio.
Dim Fin, NumeroDePuntos, M As Integer
Dim X,Y,SUMA,Distancia,DistanciaPromedio As Float
Dim PuntoAEvaluar As Object                        ‘es posible definir variables
                                               ‘objeto, las comillas son remakes
                                               ‘que permiten ignorar el comentario
                                               ‘siguiente como en este caso

Fin=TableInfo(Puntos,8)’ la variable fin es el número de renglones en la tabla
Select * From Puntos Where RowId=1                 ‘selecciona el primer registro de
                                               ‘ la tabla


For NumeroDePuntos =1 To FIN                       ‘se inicia un ciclo para recorrer
                                                    ‘todos los objetos de la tabla, son
                                                    ‘puntos sobre los cuales se medirá
                                                    ‘ la distancia al resto

Select Obj From Puntos Where RowId=NumeroDePuntos ‘selecciona el renglón que va en el ciclo

PuntoAEvaluar= Selection.Obj ‘se define un objeto a examinar

   X=ObjectGeography(PuntoAEvaluar,1)          ‘se extraen las coordenadas del
                                                    ‘punto
   y=ObjectGeography(PuntoAEvaluar,2)

   Suma=0                                      ‘Se inicia acumulador donde se
                                               ‘añade distancia total

   For M=1 To FIN
       Select * From Puntos Where RowId=M          ‘Se inicia ciclo para medir la
                                               ‘distancia al segundo punto

       Distancia=Distance(X,Y,CentroidX(Selection.Obj),CentroidY(Selection.Obj),"cm")
                                               ‘se estima la distancia

       Suma=Suma+Distancia                     ‘se suma la distancia
   Next

DistanciaPromedio=Suma/FIN                     ‘se promedia

Update Puntos
   Set DistanciaPromAlResto = DistanciaPromedio    ‘se almacena
   Where Rowid = NumeroDePuntos


Next


Si interpolamos el resultado sale algo como lo siguiente:


No hay comentarios:

Publicar un comentario