PostGIS: chia một đa giác theo tỷ lệ nhất định


11

Có cách nào thuận tiện để chia đa giác thành nnhiều phần, kích thước nhiều hơn hoặc ít hơn bằng nhau trong PostGIS không?


Diện tích bằng nhau hoặc kích thước bằng nhau (tức là chiều rộng và chiều cao tương tự)?
Anthony -GISCOE-

Diện tích, bất kể tỷ lệ.
Adam Matan


Tôi cho rằng không có giải pháp nào cho vấn đề này trong R không gian
Brad Nesom

Câu trả lời:


8

Đâ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;

2

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


Bạn có thể vui lòng cung cấp thêm thông tin về các thuật toán?
Majid Hojati
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.