Hay muchos formas de ponderar las distancias para construir los polígonos de Thiessen. La idea básica para construirlos se basa en comparar la distancia entre un punto arbitrario x y dos puntos fijos p y q ; tiene que decidir si x está "más cerca" de p que a q o no. Para ello -al menos conceptualmente- consideramos las distancias dp = d( x , p ) y dq= d( x , q ). La ponderación suele producirse de dos maneras: los puntos pueden recibir ponderaciones numéricas positivas wp y wq y las propias distancias pueden transformarse.
Para que tenga sentido, la transformación (que escribiré como f ) debería aumentar a medida que aumentan las distancias; es decir, f(d') > f(d) siempre que d' > d >= 0. Ejemplos de estas transformaciones son f(d) = d+1, f(d) = d^2 (Ley de Gravitación Minorista de Reilly), f(d) = 1 - 1/d (suponiendo que todas las distancias son menores que 1), f(d) = log(d), f(d) = exp(d)-1.
Entonces diríamos x está "más cerca" de p que a q exactamente cuando
f(d( x , p )) / wp < f(d( x , q )) / wq.
Fíjese en la división por los pesos, en lugar de la multiplicación: esto significa que los pesos grandes tenderán a "atraer" puntos a distancias mayores. Lo verás en el ejemplo de carrera que aparece a continuación.
Esto es lo bonito, y el sentido de esta exposición un tanto abstracta: aunque las regiones de Thiessen resultantes pueden tener límites complejos y extremadamente difíciles de calcular, son relativamente fáciles de calcular utilizando una representación basada en una cuadrícula. Esta es la receta:
-
Para cada punto de entrada p , calcula su cuadrícula de distancia euclidiana [d(p)].
-
Utilice el Álgebra de Mapas para aplicar f y los pesos, reexpresando así cada cuadrícula de distancia como
[fp] = f([d(p)]) / wp.
Aquí hay un ejemplo utilizando f(d) = 100 + d^(3/2); la escala es de 400 por 600.
A medida que f(d) aumenta el valor se oscurece. Evidentemente, la distancia en este ejemplo es con respecto al punto rojo central; los otros cuatro puntos reciben sus cálculos de distancia por separado (no se muestra). Las áreas de los puntos son proporcionales a sus pesos, que son 2, 10, 3, 4 y 5.
-
Calcula el mínimo local de todas estas mallas [fp]. Llámalo [f]. He aquí un ejemplo.
-
Comparando [f] con cada [fp], a cada celda de la cuadrícula se le asigna el identificador del primer p para el que [f] >= [fp]. (Esto puede hacerse en un solo paso con un posición más baja operación, por ejemplo).
(Dudo que exista un algoritmo en algún lugar que calcule una solución en formato vectorial para esta función de ponderación f).
Obviamente, si tienes más de un puñado de puntos p lo harás script, y si su número asciende a miles, probablemente abandonarás el intento por ser computacionalmente impracticable (aunque hay formas de agilizar el cálculo al ponerlo en mosaico).
Otro ejemplo, que muestra los polígonos de Thiessen en un elipsoide, aparece en https://gis.stackexchange.com/a/17377/ .