Gewichtete Thiessen-Polygone erstellen?

17

Ich habe ein Punkt-Shapefile und erstelle Thiessen (Voronoi) -Polygone programmgesteuert mit folgender Skriptsyntax:

CreateThiessenPolygons_analysis (in_features, out_feature_class, fields_to_copy) 

Jeder Punkt ist jedoch mit einer Fläche verknüpft (dh der bevorzugten Größe jedes Polygons), und ich möchte, dass die Thiessen-Polygone basierend auf diesem Feld gewichtet werden.

Ist das möglich und wie?

Gibt es einen relevanten Code in VBA?

Demetris
quelle

Antworten:

15

Es gibt viele Möglichkeiten, Entfernungen für die Konstruktion von Thiessen-Polygonen zu gewichten. Die Grundidee bei ihrer Konstruktion basiert auf dem Vergleich des Abstands zwischen einem beliebigen Punkt x und zwei festen Punkten p und q ; Sie müssen entscheiden, ob x "näher" an p als an q ist oder nicht. Zu diesem Zweck betrachten wir - zumindest konzeptionell - die Abstände dp = d ( x , p ) und dq = d ( x , q ). Die Gewichtung erfolgt normalerweise auf zwei Arten: Den Punkten können positive numerische Gewichte wp und wq gegeben und die Abstände selbst transformiert werden.

Sinnvollerweise sollte die Transformation (die ich als f schreiben werde ) mit zunehmenden Entfernungen zunehmen. das heißt, f (d ')> f (d), wann immer d'> d> = 0. Beispiele für solche Transformationen sind f (d) = d + 1, f (d) = d ^ 2 (Reillys Gesetz der Gravitation im Einzelhandel) ), f (d) = 1 - 1 / d (unter der Annahme, dass alle Abstände kleiner als 1 sind), f (d) = log (d), f (d) = exp (d) -1.

Wir würden dann sagen, x ist "näher" an p als an q genau wann

f (d ( x , p )) / wp <f (d ( x , q )) / wq.

Beachten Sie die Division durch die Gewichte und nicht die Multiplikation: Dies bedeutet, dass große Gewichte dazu neigen, Punkte bei größeren Entfernungen "einzuziehen". Sie werden dies im folgenden Beispiel sehen.

Hier ist das Schöne und der springende Punkt dieser etwas abstrakten Darstellung: Obwohl die resultierenden Thiessen-Regionen komplexe, äußerst schwierig zu berechnende Grenzen haben können, sind sie mit einer gitterbasierten Darstellung relativ einfach zu berechnen. Hier ist das Rezept:

  1. Berechnen Sie für jeden Eingabepunkt p sein euklidisches Abstandsgitter [d (p)].

  2. Verwenden Sie die Kartenalgebra, um f und die Gewichte anzuwenden und dabei jedes Abstandsgitter als auszudrücken

    [fp] = f ([d (p)]) / wp.

    Hier ist ein Beispiel mit f (d) = 100 + d ^ (3/2); Der Maßstab ist 400 mal 600.

    Abbildung 1

    Mit zunehmendem Wert von f (d) wird der Wert dunkler. Offensichtlich bezieht sich der Abstand in diesem Beispiel auf den zentralen roten Punkt; Die anderen vier Punkte erhalten ihre separaten Entfernungsberechnungen (nicht gezeigt). Die Flächen der Punkte sind proportional zu ihren Gewichten, dh 2, 10, 3, 4 und 5.

  3. Berechnen Sie das lokale Minimum all dieser Gitter [fp]. Nenne dies [f]. Hier ist ein Beispiel.

    Figur 2

  4. Durch Vergleichen von [f] mit jedem [fp] ordnen Sie jeder Gitterzelle die Kennung des ersten p zu, für das [f]> = [fp] gilt. (Dies kann zum Beispiel in einem Schritt mit einer Operation in der niedrigsten Position erfolgen .)

    Figur 3

    (Ich bezweifle, dass es irgendwo einen Algorithmus gibt, der eine Vektorformatlösung für diese Gewichtungsfunktion f berechnet.)

Wenn Sie mehr als eine Handvoll Punkte p haben, erstellen Sie ein Skript, und wenn die Anzahl der Punkte Tausende beträgt, werden Sie den Versuch wahrscheinlich als rechenunpraktikabel abbrechen (obwohl es Möglichkeiten gibt, die Berechnung durch Kacheln zu beschleunigen).

Ein weiteres Beispiel, das Thiessen-Polygone auf einem Ellipsoid zeigt, finden Sie unter /gis//a/17377/ .

whuber
quelle
3
+1 Ich habe nie bemerkt, wie viel einfacher dieses Problem wird, wenn ich einen Rasteransatz wähle.
Kirk Kuykendall
Whuber: Sehr ausgefeilter Prozess! Um mich jedoch auf meine Anwendung zu konzentrieren: Jeder Punkt meiner Eingabedatei repräsentiert den ungefähren Zentoid eines Grundstücks. Ich erstelle mithilfe dieser Skriptzeile eine Vektor-Thiessen-Polygondatei. Jedem Polygon wird ein Raum zugewiesen, dh eine Größe, die auf dem Prinzip des gleichen Abstands von Grenzen der Thiessen-Polygone basiert. Andererseits hat jede Landparel eine vordefinierte Größe, die in dem Bereichsfeld bereitgestellt wird; und dies ist der Faktor, den ich berücksichtigen möchte, damit Polygone proportional zu diesem Faktor sind. Irgendeine Idee bitte?
Demetris
Ich verstehe deine Bemerkungen nicht, Demetris. Sie klingen, als ob Sie wirklich ein Flächenkartogramm anstatt einer Sammlung von Thiessen-Polygonen möchten. Es wäre hilfreich zu erklären, warum Sie diese Polygone berechnen. Welches Problem werden sie lösen? Wie werden sie interpretiert?
whuber
Whuber: Jede meiner im Thiessen-Polygonprozess eingegebenen Punkte ist der ungefähre Schwerpunkt einer neuen Flurstücksmenge. Daher erstelle ich Thiessen-Polygone basierend auf diesen Punkten, die die Form von Landparzellen darstellen (ein Punkt-ein-Landparzelle). Ich kann viele Sätze zufälliger Landparzellenformen erzeugen, indem ich diese Punkte bewege, um meinen genetischen Algorithmus zu füttern. Das Problem ist, dass diese generierten Parzellenformen (dh Thiessen-Polygone) eine vordefinierte Fläche haben sollten, und ich frage mich, ob es möglich ist, dies bei der Verwendung der Thiessen-Polygonoperation zu berücksichtigen. Ich hoffe, dass das Sinn macht.
Demetris
Was versucht Ihr genetischer Algorithmus zu tun? Es hört sich immer noch so an, als ob Sie keine gewichteten Thiessen-Polygone benötigen: Ich glaube, es gibt keine mögliche Gewichtung, die sicherstellt, dass die Polygone vorgegebene Bereiche oder sogar vorgegebene relative Bereiche erreichen.
whuber
10

Was Sie wollen, ist ein gewichtetes Voronoi-Diagramm: http://en.wikipedia.org/wiki/Weighted_Voronoi_diagram Auch bekannt als kreisförmige Dirichlet-Tessellation, wenn multiplikative Gewichte in einer 2D-Ebene verwendet werden. Jemand scheint eine arcgis 9-Erweiterung erstellt zu haben, um diese zu erstellen: http://arcscripts.esri.com/details.asp?dbid=15481 Hier finden Sie ein Benutzerhandbuch http://geography.unt.edu/~pdong/software .htm und eine Veröffentlichung von Dong, P., 2008. Generieren und Aktualisieren von multiplikativ gewichteten Voronoi-Diagrammen für Punkt-, Linien- und Polygon-Features in GIS. Computers & Geosciences, Band 34, Ausgabe 4, Seiten 411-421.

Hierfür gibt es einen kürzlich erschienenen Artikel über einen vektorbasierten Algorithmus (ich nehme an, der Algorithmus von P Dong basiert auf Rastern). http://www.sciencedirect.com/science/article/pii/S0098300411003037 Zusammenfassung besagt, dass C # -Code enthalten ist.

Blord-Castillo
quelle
1
Blord-castillo: Vielen Dank für all diese Informationen. Es ist sehr nützlich und ich werde dies als umfassende Antwort akzeptieren. Mein neues Problem ist jedoch, dass ich dieses Tool mehrmals in meinem Code ausführen möchte, indem ich Eingaben wie z. B. die obige Skriptzeile bereitstelle. Ist das möglich?
Demetris