Erstellen gleichmäßig verteilter Punkte innerhalb einer unregelmäßigen Grenze

8

Ich muss eine gleichmäßig verteilte Reihe von Punkten innerhalb einer Reihe von seltsam geformten Polygonen erstellen (früher Quadrate, jetzt Quadrate mit Donutlöchern).

Die Art und Weise, wie ich dieses Problem bisher gelöst habe, besteht darin, ein Fischnetz des Polygons zu erstellen und dann den Schwerpunkt jeder Einheit zu verwenden, die das Fischnetz erstellt.

Das Problem ist jedoch komplexer geworden und ich habe jetzt komplexere Polygone. Die Schwerpunkte der Netzeinheiten sind nicht mehr gut genug.

Ich habe versucht, die Polygone in ein Raster zu konvertieren und dann das Werkzeug Teilen für Raster zu verwenden und eine Ausgabe mit einer bestimmten Anzahl von Einheiten gleicher Fläche zu erstellen, aber das funktioniert nicht, da meine Eingabevektordaten nicht über die erforderlichen Daten verfügen vaues, damit dieser Rasterprozess ordnungsgemäß ausgeführt wird.

Ich arbeite mit Arc 9.3 (habe aber auch Zugriff auf mehrere andere Softwarepakete)

Kapjaki
quelle
3
"Gleichmäßig verteilt" kann verschiedene Dinge bedeuten, einschließlich gleichmäßiger Abstände auf einem vordefinierten Gitter, gleichmäßiger Abstand auf einem Gitter mit zufälligem Ursprung (und möglicherweise zufälliger Ausrichtung), einem zufällig angeordneten Punkt in jeder Gitterzelle, gleichmäßig zufällig (ohne Gitter) und sogar zufällig mit der Tendenz, einander auszuweichen. Könnten Sie genauer sagen, welche Sie benötigen?
whuber
Ähnlich wie bei dieser Frage? gis.stackexchange.com/questions/4828/…
Kirk Kuykendall
@whuber: Nun ... ehrlich gesagt bin ich mir nicht sicher. Idealerweise würden die Punkte so verteilt, dass der Abstand zwischen den Punkten so weit wie möglich ausgeglichen wird. Sie müssen sich nicht in einem perfekten Raster befinden. Wäre das einheitlich zufällig?
Kapjaki
Dies sind subtile Dinge, aber nein, das Ausgleichen der Entfernungen zerstört einen Großteil der Zufälligkeit. Es garantiert, dass die Kenntnis eines Ortes die Kenntnis nahegelegener Orte viel vorhersehbarer macht. Insbesondere wird die unmittelbare (kleine) Nachbarschaft eines Punktes frei von anderen Punkten sein. Das ist überhaupt nicht einheitlich! Ein guter Anfang, wenn Sie über solche Dinge nachdenken, ist darüber nachzudenken, wie die Punkte verwendet werden. Wenn sie zum Entwerfen von Dingen wie dem Pflanzen von Bäumen dienen, ist es großartig, weit voneinander entfernt zu sein. Wenn Sie jedoch statistische Analysen mit ihnen durchführen wollen, dann passen Sie auf!
whuber
@ Whuber: In der Tat sind die Feinheiten, von denen du sprichst, für mich neu. Ziel ist es, potenzielle Standorte für Ölquellen in einem bestimmten Gebiet aufzuzeigen. Zufälligkeit ist nicht erforderlich, nur dass der Abstand zwischen Punkten maximiert und zumindest etwas gleichmäßig über das Begrenzungspolygon verteilt wird.
Kapjaki

Antworten:

3

Wenn Sie in QGIS das fTools- Paket installieren , besteht die Möglichkeit, "reguläre Punkte" zu generieren (Tools -> Recherchetools -> reguläre Punkte).

Geben Sie hier die Bildbeschreibung ein

djq
quelle
Dies wird vermutlich ein Punktegitter erzeugen? Und ist nicht gezwungen, innerhalb eines Polygons oder einer Menge von Polygonen zu liegen? (Das ist keine Kritik: Man kann später alle Punkte entfernen, die außerhalb eines Polygons liegen.)
whuber
2
@whuber: Die Punkte werden alle innerhalb des Polygons liegen, das durch "Input Boundary Layer" angegeben wird
underdark
2

Sie können dies in PostGIS mit einer Abfrage wie der folgenden tun:

SELECT grid.the_geom FROM 
(select st_setsrid(st_point(x, y), polygon_srid) AS the_geom from 
(select generate_series(minX, maxX, grid_size) AS x) AS a,
(select generate_series(minY, maxY, grid_size) AS y) AS b) AS grid,
polygon_table
WHERE ST_Within(grid.the_geom, polygon_table.the_geom);

Sie können es bei postgisonline mit diesem Beispiel ausprobieren :

SELECT grid.the_geom FROM 
(select st_setsrid(st_point(x, y), 3021) AS the_geom from 
(select generate_series(130000, 142000, 500) AS x) AS a,
(select generate_series(260000, 270000, 500) AS y) AS b) AS grid,
lakes
WHERE ST_Within(grid.the_geom, lakes.the_geom);

Fügen Sie die Abfrage oben in das Textfeld oben ein und drücken Sie die Map1-Taste. Sie können auch "Seen" aus der Hintergrund-Dropdown-Liste auswählen, um das Polygon anzuzeigen, das zum Füllen mit Punkten verwendet wird.

/ Nicklas

Nicklas Avén
quelle
Nicklas 'Beitrag scheint auf dem richtigen Weg zu sein. Gibt es eine Möglichkeit anzugeben, wie viele Punkte Sie im See thoguh verteilen möchten? Ich habe eine Weile nach einer solchen Methode gesucht. Vielen Dank, Ray
Gibt es eine Möglichkeit, aus dem Polygon "Blöcke" zu erstellen, indem die Gesamtfläche gleichmäßig aufgeteilt wird? Dh wenn 9 Punkte gewünscht werden, teilen Sie das Polygon in 9 'Blöcke' gleicher Fläche und erhalten Sie dann die Schwerpunkte von diesen?
Kapjaki
Da das Polygon jede seltsame Form haben kann, würde es wahrscheinlich einen Versuch-und-Irrtum-Algorithmus erfordern, um dies zu erreichen.
Nicklas Avén
Das scheint gut zu funktionieren. Leider verstehe ich nicht genau, wie ich es verwenden kann. Wie bringe ich meine eigenen Daten in das Szenario ein?
Kapjaki
@Kapjaki, lade deine Polygone in eine Postgis-Tabelle und ändere in meinem ersten Beispiel "olygon_table" in den Namen deiner Polygontabelle. Ändern Sie auch in generate_series, um der Ausdehnung Ihrer Polygone zu entsprechen, und wechseln Sie von 500 zu der gewünschten Rastergröße. Die Abfrage kann umgeschrieben werden, um den Umfang direkt zu ermitteln. aber nicht von meinem Handy in einem Auto :)
Nicklas Avén
0

Sie können den Lloyds-Algorithmus verwenden:

https://en.m.wikipedia.org/wiki/Lloyd%27s_algorithm

John
quelle