PostGIS:按给定比例拆分多边形


11

n在PostGIS中,是否有一种方便的方法可以将多边形分成大小大致相等的部分?


面积相等或大小相等(即宽度和高度相似)?
安东尼-GISCOE- 2011年

面积,不分比例。
亚当·马坦


我很惊讶R空间中没有解决方案
Brad Nesom 2011年

Answers:


8

这是一个老问题,没有简单的解决方案。我碰到的唯一方法是创建一个函数,标题,零件数量和计算机进行试验,直到面积相等。AutoCAD中具有LISP功能。在postgis中,它的工作原理相同,这是Manning 的PostGIS in Action摘录,此代码将多边形分为两个相等的部分:

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

一种方法可能是将多边形完全分割成三角形,每个三角形都有给定的面积。然后,将尝试将那些(相邻)三角形重新组合为(或多或少)大小面积/ n的多边形。这将是“子集总和”或“背包”问题的一种定制版本(并且我不知道如何从PostGIS开始)。


您能否提供有关算法的更多信息?
Majid Hojati
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.