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?


Gleiche Fläche oder gleiche Größe (dh ähnliche Breite und Höhe)?
Anthony-GISCOE-

Fläche, unabhängig von den Proportionen.
Adam Matan


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;

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).


Können Sie bitte weitere Informationen zu den Algorithmen geben?
Majid Hojati
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.