Existe uma maneira conveniente de dividir um polígono em n
partes, mais ou menos iguais em tamanho em PostGIS?
Existe uma maneira conveniente de dividir um polígono em n
partes, mais ou menos iguais em tamanho em PostGIS?
Respostas:
Este é um problema antigo, sem solução simples. A única abordagem pela qual me deparei é fazer uma função que você indica e o número de peças e o computador fazem testes até obter áreas iguais. Existe uma função LISP com isso no AutoCAD. No postgis, ele funciona da mesma maneira, aqui está um trecho do PostGIS in Action de Manning, esse código divide um polígono em duas partes iguais:
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;
Uma abordagem pode ser dividir o polígono completamente em triângulos, cada um com uma determinada área. Seria uma questão de tentar agrupar esses triângulos (adjacentes) de volta em polígonos de área (mais ou menos) de tamanho / n. Isso seria uma espécie de versão personalizada do problema de "subconjunto de soma" ou "mochila" (e eu não saberia como começar com o PostGIS).