Có cách nào thuận tiện để chia đa giác thành n
nhiều phần, kích thước nhiều hơn hoặc ít hơn bằng nhau trong PostGIS không?
Có cách nào thuận tiện để chia đa giác thành n
nhiều phần, kích thước nhiều hơn hoặc ít hơn bằng nhau trong PostGIS không?
Câu trả lời:
Đây là một vấn đề cũ không có giải pháp đơn giản. Cách tiếp cận duy nhất mà tôi đã gặp là tạo ra một chức năng mà bạn đưa ra một tiêu đề và số lượng các bộ phận và máy tính thực hiện các thử nghiệm cho đến khi nó có diện tích bằng nhau. Có một chức năng LISP với chức năng đó trong AutoCAD. Trong postgis, nó hoạt động như nhau, đây là đoạn trích của PostGIS in Action from Manning, mã này chia một đa giác thành hai phần bằng nhau:
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;
Một cách tiếp cận có thể là chia đa giác hoàn toàn thành các hình tam giác, mỗi hình có một diện tích nhất định. Sau đó, sẽ là vấn đề cố gắng nhóm các hình tam giác (liền kề) đó lại thành đa giác có diện tích (nhiều hơn hoặc ít hơn) diện tích / n. Đây sẽ là một loại phiên bản tùy chỉnh của vấn đề "tổng phụ" hoặc "ba lô" (và tôi không biết làm thế nào để bắt đầu với vấn đề đó với PostGIS).