PostGIS: Teilen Sie ein Polygon in einem bestimmten Verhältnis

11

Gibt es eine bequeme Möglichkeit, ein Polygon in nTeile zu teilen , die in PostGIS mehr oder weniger gleich groß sind?

Adam Matan
quelle
Gleiche Fläche oder gleiche Größe (dh ähnliche Breite und Höhe)?
Anthony-GISCOE-
Fläche, unabhängig von den Proportionen.
Adam Matan
1
verwandter Beitrag gis.stackexchange.com/questions/5300/…
Kirk Kuykendall
Ich bin überrascht, dass es in R räumlich keine Lösung dafür gibt
Brad Nesom

Antworten:

8

Dies ist ein altes Problem ohne einfache Lösung. Der einzige Ansatz, auf den ich gestoßen bin, besteht darin, eine Funktion zu erstellen, bei der Sie eine Überschrift und die Anzahl der Teile angeben und der Computer Versuche durchführt, bis die gleichen Flächen erreicht sind. In AutoCAD gibt es eine LISP-Funktion. In Postgis funktioniert es genauso. Hier ist ein Auszug aus PostGIS in Aktion von Manning. Dieser Code teilt ein Polygon in zwei gleiche Teile:

WITH RECURSIVE
ref(the_geom, env) AS (
SELECT the_geom,
ST_Envelope(the_geom) As env,
ST_Area(The_geom)/2 As targ_area,
1000 As nit
FROM us.states
WHERE state = 'Idaho'
),

T(n,overlap) AS (
VALUES (CAST(0 As Float),CAST(0 As Float))
UNION ALL
SELECT n + nit, ST_Area(ST_Intersection(the_geom, ST_Translate(env, n+nit, 0)))
FROM T CROSS JOIN ref
WHERE ST_Area(ST_Intersection(the_geom, ST_Translate(env, n+nit, 0)))> ref.targ_area
) ,  

bi(n) AS
(SELECT n
FROM T
ORDER BY n DESC LIMIT 1)  

SELECT bi.n,
ST_Difference(the_geom, ST_Translate(ref.env, n,0)) As geom_part1,
ST_Intersection(the_geom, ST_Translate(ref.env, n,0)) As geom_part2
FROM bi CROSS JOIN ref;
Pablo
quelle
2

Ein Ansatz könnte darin bestehen, das Polygon vollständig in Dreiecke mit jeweils einer bestimmten Fläche aufzuteilen. Dann wäre es eine Frage des Versuchs, diese (benachbarten) Dreiecke wieder in Polygone mit einer (mehr oder weniger) Größe Fläche / n zu gruppieren. Dies wäre eine Art angepasste Version des Problems "Teilmengen" oder "Rucksack" (und ich würde nicht wissen, wie ich mit PostGIS damit anfangen soll).

Anthony -GISCOE-
quelle
Können Sie bitte weitere Informationen zu den Algorithmen geben?
Majid Hojati