Il existe de nombreuses façons de pondérer les distances pour construire des polygones de Thiessen. L'idée de base de leur construction est basée sur la comparaison de la distance entre un point arbitraire x et deux points fixes p et q ; vous devez décider si x est "plus proche" de p que de q ou non. À cette fin - au moins conceptuellement - nous considérons les distances dp = d ( x , p ) et dq = d ( x , q ). La pondération se produit généralement de deux manières: les points peuvent recevoir des poids numériques positifs wp et wq et les distances elles-mêmes peuvent être transformées.
Pour donner un sens, la transformation (que j'écrirai comme f ) devrait augmenter à mesure que les distances augmentent; c'est-à-dire, f (d ')> f (d) chaque fois que d'> d> = 0. Des exemples de telles transformations sont f (d) = d + 1, f (d) = d ^ 2 (loi de Reilly sur la gravitation au détail ), f (d) = 1 - 1 / d (en supposant que toutes les distances sont inférieures à 1), f (d) = log (d), f (d) = exp (d) -1.
On dirait alors que x est "plus proche" de p que de q exactement quand
f (d ( x , p )) / wp <f (d ( x , q )) / wq.
Remarquez la division par les poids, plutôt que la multiplication: cela signifie que les gros poids auront tendance à «tirer» des points à de plus grandes distances. Vous le verrez dans l'exemple en cours ci-dessous.
Voici la belle chose, et tout l'intérêt de cette exposition quelque peu abstraite: bien que les régions Thiessen résultantes puissent avoir des frontières complexes et extrêmement difficiles à calculer, elles sont relativement faciles à calculer en utilisant une représentation basée sur une grille. Voici la recette:
Pour chaque point d'entrée p , calculez sa grille de distance euclidienne [d (p)].
Utilisez l'algèbre de carte pour appliquer f et les poids, ré-exprimant ainsi chaque grille de distance sous la forme
[fp] = f ([d (p)]) / wp.
Voici un exemple utilisant f (d) = 100 + d ^ (3/2); l'échelle est de 400 par 600.
Lorsque f (d) augmente, la valeur s'assombrit. Évidemment, la distance dans cet exemple est par rapport au point rouge central; les quatre autres points obtiennent leurs calculs de distance séparés (non représentés). Les zones des points sont proportionnelles à leurs poids, qui sont 2, 10, 3, 4 et 5.
Calculez le minimum local de toutes ces grilles [fp]. Appelez cela [f]. Voici un exemple.
En comparant [f] à chaque [fp], à chaque cellule de la grille attribuez l'identifiant du premier p pour lequel [f]> = [fp]. (Cela peut être fait en une seule étape avec une opération de position la plus basse , par exemple.)
(Je doute qu'il existe un algorithme n'importe où qui calculera une solution de format vectoriel pour cette fonction de pondération f.)
Évidemment, si vous avez plus d'une poignée de points p, vous l'écrirez, et si leur nombre atteint des milliers, vous abandonnerez probablement la tentative comme étant impraticable sur le plan du calcul (bien qu'il existe des moyens d'accélérer le calcul en le juxtaposant).
Un autre exemple, montrant des polygones de Thiessen sur un ellipsoïde, apparaît sur /gis//a/17377/ .
Ce que vous voulez, c'est un diagramme de Voronoï pondéré: http://en.wikipedia.org/wiki/Weighted_Voronoi_diagram également connu sous le nom de pavage circulaire de Dirichlet lorsqu'il est fait avec des poids multiplicatifs dans un plan 2D. Quelqu'un semble avoir construit une extension arcgis 9 pour les construire: http://arcscripts.esri.com/details.asp?dbid=15481 Avec un guide d'utilisation disponible ici http://geography.unt.edu/~pdong/software .htm et un article publié à Dong, P., 2008. Génération et mise à jour de diagrammes de Voronoi pondérés multiplicativement pour les entités ponctuelles, linéaires et polygonales dans le SIG. Ordinateurs et géosciences, volume 34, numéro 4, pages 411-421.
Il y a un article récent sur un algorithme basé sur un vecteur (je suppose que l'algorithme de P Dong est basé sur un raster) pour cela. http://www.sciencedirect.com/science/article/pii/S0098300411003037 Le résumé indique que le code c # est inclus.
la source