Thuật toán phân vùng chung ít mờ nhất


9

Đưa ra hai phân vùng khác nhau có hình dạng (vì lý lẽ, hai bộ phận quản trị khác nhau của một quốc gia), làm cách nào tôi có thể tìm phân vùng mới mà cả hai phân vùng đó phù hợp, cho phép (và tối ưu hóa) một số lỗi?

Ví dụ, bỏ qua lỗi, tôi muốn một thuật toán thực hiện điều này:

Phiên bản không mờ

Có lẽ nó giúp thể hiện điều này trong các điều khoản thiết lập. Sử dụng cách đánh số sau:

Tôi có thể diễn tả các phân vùng ở trên như:

A = {{1}, {2}, {3,4,7,8}, {5}, {6}, {9,10,13,14}, {11}, {12}, {15} , {16}}

B = {{1,2,5,6}, {3}, {4}, {7}, {8}, {9}, {10}, {13}, {14}, {11,15} , {12,16}}

Một dấu chấm B = {{1,2,5,6}, {3,4,7,8}, {9,10,13,14}, {11,15}, {12,16}}

và thuật toán để tạo A chấm B có vẻ đơn giản (đại loại như, nếu hai phần tử nằm trong một phân vùng với nhau trong A (B) hợp nhất các phân vùng mà chúng nằm trong B (A) - lặp lại cho đến khi A và B bằng nhau).

Nhưng bây giờ hãy tưởng tượng rằng một số dòng này hơi khác nhau giữa hai phân vùng, do đó câu trả lời hoàn hảo này là không thể, và thay vào đó tôi muốn chủ đề câu trả lời tối ưu để giảm thiểu một số tiêu chí lỗi.

Lấy một ví dụ mới:

Ở đây trong cột bên trái, chúng ta có hai phân vùng không có đường chung (ngoài đường viền bên ngoài). Giải pháp khả thi duy nhất của loại trên là tầm thường, cột bên phải. Nhưng nếu chúng tôi cho phép các giải pháp "mờ", thì cột giữa có thể được cho phép, với 5% tổng diện tích đang được tranh cãi (nghĩa là được phân bổ cho một vùng ngầm khác nhau trong mỗi phân vùng thô). Vì vậy, chúng tôi có thể mô tả cột giữa là đại diện cho "phân vùng chung ít thô nhất với <= 5% lỗi".

Cho dù câu trả lời thực tế là phân vùng ở hàng trên cùng, cột giữa hoặc hàng giữa, cột giữa - hoặc một cái gì đó ở giữa, đều ít quan trọng.


Tôi không hiểu hoạt động của bạn. Có vẻ như bạn đang tìm kiếm một chung coarsening của hai phân vùng. Mặc dù không có tiêu chí bổ sung, thường sẽ có nhiều giải pháp. Ví dụ, vì thô (thay vì tinh chỉnh) dường như là mục tiêu của bạn, tại sao dừng lại ở nơi bạn đã làm? Tại sao không chỉ vẽ hình vuông giới hạn chung?
whuber

1
Cảm ơn, tôi đã viết sai điều này. Những gì tôi nghĩ tôi có nghĩa là phân vùng phổ biến tốt nhất , hoặc có lẽ "ít thô nhất".
EEAndrew

Trong trường hợp đó, kết quả sẽ trông rất khác so với những gì bạn đã rút ra. Nó sẽ là 4 x 4 bàn cờ hình vuông. Từ một ví dụ này tôi đã không thể suy ra quy tắc bạn muốn tuân theo. Có lẽ bạn đang cố gắng giữ tất cả các cạnh chung cho tất cả các tính năng đầu vào? Vấn đề thực tế bạn đang cố gắng giải quyết là gì? Bạn có thể cung cấp một ví dụ cụ thể để giúp chúng tôi hiểu câu hỏi của bạn nên là gì không?
whuber

Tôi đã xây dựng rất nhiều - có lẽ điều này sẽ giúp. Đúng là trong trường hợp mờ tôi không thể xác định chính xác câu hỏi của mình, nhưng tôi nghĩ trong trường hợp chính xác tôi biết chính xác ý tôi là gì (ngay cả khi tôi không diễn đạt tốt).
EEAndrew

Cảm ơn bạn vì những nỗ lực đó (+1). Về ký hiệu bộ lý thuyết của bạn, phân vùng của một khu vực hình thành một tập có thứ tự từng phần : phân vùng Một là một sự tinh tế của B , và B là một coarsening của A , khi tất cả các thiết lập trong Một là một tập hợp con của một trong B . Hoạt động lại xuất hiện kết hợp là coarsening chung tốt nhất của AB . Một cách để giải quyết phiên bản mờ của bạn là khai thác các khả năng của GIS để loại bỏ các nguy hiểm và các phần tử để sửa các khác biệt nhỏ giữa hai lớp và sau đó thực hiện thao tác không mờ.
whuber

Câu trả lời:


2

Bạn có thể làm điều này bằng cách đánh giá sự khác biệt của ranh giới của đa giác với sự khác biệt đối xứng giữa các ranh giới của chúng hoặc được biểu thị một cách tượng trưng là:

Difference(a, SymDifference(a, b))

Lấy hình học ab , được biểu thị dưới dạng MultiLinestrings qua hai dòng và hình ảnh tiếp theo:

MULTILINESTRING((0 300,50 300,50 250,0 250,0 300),(50 300,100 300,100 250,50 250,50 300),(0 250,50 250,50 200,0 200,0 250),(50 250,100 250,100 200,50 200,50 250),(100 300,200 300,200 200,100 200,100 300),(0 200,100 200,100 100,0 100,0 200),(100 200,150 200,150 150,100 150,100 200),(150 200,200 200,200 150,150 150,150 200),(100 150,150 150,150 100,100 100,100 150),(150 150,200 150,200 100,150 100,150 150))
MULTILINESTRING((0 300,100 300,100 200,0 200,0 300),(100 300,150 300,150 250,100 250,100 300),(150 300,200 300,200 250,150 250,150 300),(100 250,150 250,150 200,100 200,100 250),(150 250,200 250,200 200,150 200,150 250),(0 200,50 200,50 150,0 150,0 200),(50 200,100 200,100 150,50 150,50 200),(0 150,50 150,50 100,0 100,0 150),(50 150,100 150,100 100,50 100,50 150),(100 200,150 200,150 100,100 100,100 200),(150 200,200 200,200 100,150 100,150 200))

một b

Sự khác biệt đối xứng, trong đó các phần của ab không giao nhau, là:

MULTILINESTRING((50 300,50 250),(50 250,0 250),(100 250,50 250),(50 250,50 200),(150 150,100 150),(200 150,150 150),(150 300,150 250),(150 250,100 250),(200 250,150 250),(150 250,150 200),(50 200,50 150),(50 150,0 150),(100 150,50 150),(50 150,50 100))

giao tiếp

Và cuối cùng, đánh giá sự khác biệt giữa a hoặc b và sự khác biệt đối xứng:

MULTILINESTRING((0 300,50 300),(0 250,0 300),(50 300,100 300),(100 300,100 250),(50 200,0 200),(0 200,0 250),(100 250,100 200),(100 200,50 200),(100 300,150 300),(150 300,200 300,200 250),(200 250,200 200),(200 200,150 200),(150 200,100 200),(100 200,100 150),(100 150,100 100),(100 100,50 100),(50 100,0 100,0 150),(0 150,0 200),(150 200,150 150),(200 200,200 150),(150 150,150 100),(150 100,100 100),(200 150,200 100,150 100))

khác biệt

Bạn có thể triển khai logic này trong GEOS (Shapely, PostGIS, v.v.), JTS và những người khác. Lưu ý rằng nếu hình học đầu vào là đa giác, thì ranh giới của chúng cần được trích xuất và kết quả có thể được đa giác hóa. Ví dụ: được hiển thị với PostGIS, lấy hai MultiPolygons và nhận kết quả MultiPolygon:

SELECT
  ST_AsText(ST_CollectionHomogenize(ST_Polygonize(
    ST_Difference(ST_Boundary(A), ST_SymDifference(ST_Boundary(A), ST_Boundary(B)))
  ))) AS result
FROM (
  SELECT 'MULTIPOLYGON(((0 300,50 300,50 250,0 250,0 300)),((50 300,100 300,100 250,50 250,50 300)),((0 250,50 250,50 200,0 200,0 250)),((50 250,100 250,100 200,50 200,50 250)),((100 300,200 300,200 200,100 200,100 300)),((0 200,100 200,100 100,0 100,0 200)),((100 200,150 200,150 150,100 150,100 200)),((150 200,200 200,200 150,150 150,150 200)),((100 150,150 150,150 100,100 100,100 150)),((150 150,200 150,200 100,150 100,150 150)))'::geometry AS a,
    'MULTIPOLYGON(((0 300,100 300,100 200,0 200,0 300)),((100 300,150 300,150 250,100 250,100 300)),((150 300,200 300,200 250,150 250,150 300)),((100 250,150 250,150 200,100 200,100 250)),((150 250,200 250,200 200,150 200,150 250)),((0 200,50 200,50 150,0 150,0 200)),((50 200,100 200,100 150,50 150,50 200)),((0 150,50 150,50 100,0 100,0 150)),((50 150,100 150,100 100,50 100,50 150)),((100 200,150 200,150 100,100 100,100 200)),((150 200,200 200,200 100,150 100,150 200)))'::geometry AS b
) AS f;
                               result
--------------------------------------------------------------------------------
MULTIPOLYGON(((0 300,50 300,100 300,100 250,100 200,50 200,0 200,0 250,0 300)),((100 250,100 300,150 300,200 300,200 250,200 200,150 200,100 200,100 250)),((0 200,50 200,100 200,100 150,100 100,50 100,0 100,0 150,0 200)),((150 200,200 200,200 150,200 100,150 100,150 150,150 200)),((100 200,150 200,150 150,150 100,100 100,100 150,100 200)))

Lưu ý rằng tôi chưa thử nghiệm rộng rãi phương pháp này, vì vậy hãy coi chúng là ý tưởng làm điểm khởi đầu.


Bạn có thể nói rõ về cách thuật toán này xử lý phiên bản mờ của vấn đề đang được hỏi hay không, làm thế nào để nó có thể được điều chỉnh cho phiên bản đó?
whuber

0

Lỗi thuật toán miễn phí.

Bộ thứ nhất: Bộ nhập mô tả hình ảnh ở đây thứ hai: nhập mô tả hình ảnh ở đây

Hợp nhất 2 bộ và sắp xếp theo thứ tự giảm dần theo khu vực. Chọn các hàng trong bảng (trên cùng => xuống) cho đến khi đạt được tổng diện tích = tổng diện tích (16 trong trường hợp này):

nhập mô tả hình ảnh ở đây

Các hàng được chọn làm cho câu trả lời của bạn:

nhập mô tả hình ảnh ở đây

Các tiêu chí sẽ là một sự khác biệt giữa các khu vực tích lũy và tổng số thực tế.


Điều này có vẻ như nó sẽ hoạt động chính xác chỉ trong những trường hợp rất đặc biệt. Làm thế nào để bạn đảm bảo rằng bạn sẽ kết thúc với một phân vùng không chồng chéo, đầy đủ của khu vực chung?
whuber

Chính xác. Các bước bổ sung a) bộ dữ liệu hợp nhất theo công cụ Arcgis Union b) lấy số lớn nhất đầu tiên từ bảng đã hợp nhất và kiểm tra phần của các bộ khác trong c) loại bỏ các bộ khác có ngưỡng lớn hơn, ví dụ 90%. Cái này như thế nào?
FelixIP

Tôi không biết, vì tôi chưa tìm ra câu hỏi thực sự đang hỏi gì.
whuber

Trang điểm diện tích bằng cách sử dụng các khối lớn nhất có thể. Đây là sự hiểu biết của tôi về câu hỏi
FelixIP

Giải pháp cho điều đó là sử dụng một khối duy nhất (sự kết hợp của tất cả chúng)!
whuber
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.