Làm cách nào để chuyển đổi một tập hợp các đoạn đường thành khối thành phố, với PostGIS2?


8

Về mặt lý thuyết có thể có được các đa giác của các khối thành phố (khối đô thị) từ các đường phố, khi các đường phố được biểu thị bằng trục đường ( LineStrings ).

Các khối đô thị được giới hạn bởi các đường phố, vì vậy các đoạn đường có thể được sử dụng để tạo thành một đa giác chỉ chứa một khối bên trong ... Xem hình minh họa.

Có một kịch bản PostGIS 2.X (SQL) để làm điều này? Một phần mềm plugin?
PS: hình học khối thành phố gần đúng là đủ.

Minh họa

Bắt đầu quá trình từ một "lưới các phân đoạn dòng được kết nối", có thể là: 1) thu được các đa giác liên quan; 2) cô lập đa giác bằng cách đệm âm và trừ đệm của các dòng.

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

Ví dụ: đa giác 262 (đại diện cho một khối thành phố) được bắt nguồn từ các phân đoạn 2496, 2494, 2369, 1513, ... Và đa giác lân cận 263 có thể sử dụng một số phân đoạn phổ biến, nhưng tiếp theo (bởi st_buffer âm hoặc hoạt động khác) sẽ là đa giác thực sự cô lập, vì vậy, độ chính xác thấp là đủ.


(BIÊN TẬP)

Tôi nghĩ chúng ta có thể dịch vấn đề cụ thể này trong một chung chung hơn: tập các đoạn đường có thể được xem như một loại tessellation , có nghĩa là, các phân đoạn separe máy bay vào vùng tiếp giáp lãnh hải - các khối đô thị đang nằm trong nội thất của những vùng. Mỗi phân khúc là một bên của hai khu vực.

Vấn đề chính là chuyển đổi "tập hợp các phân đoạn của phần thứ ba" thành các đa giác độc lập .


Có thể, với mô đun cấu trúc liên kết postgis mới, ranh giới đường phố, có thể được nhóm lại với nhau để tạo thành đa giác này (vùng kín).
cavila

Làm thế nào bạn sẽ đề xuất để có được khối? Đường phố (về mặt khái niệm) là một linestring, trong khi mỗi khối là một đa giác. Làm thế nào bạn có thể xác định vị trí một khối đô thị duy nhất được cung cấp một dòng dõi, với sự hiện diện của các công trình, công viên, khu bảo tồn thiên nhiên, các khối battleaxe (ví dụ: anewhouse.com.au/2012/07/battleaxe-block ), các khối nơi có sông / lạch / đường vòng giữa các đường phố, vv?
BradHards

Cảm ơn @Cavila, tôi đã tìm kiếm các ví dụ và tìm thấy một số ví dụ như thế này , rằng tôi cần một thứ gì đó, nhưng: tất cả đều bắt đầu bằng đa giác, không phải bằng "phân đoạn tàu" (xem phần khái quát hóa vấn đề của tôi). Đầu vào của tôi là một tập hợp các phân khúc.
Peter Krauss

@BradHards, cảm ơn bạn đã đánh giá (!), Tôi đã chỉnh sửa để hiển thị trọng tâm của vấn đề của tôi. Vâng, có rất nhiều trường hợp ngoại lệ như một khối battleaxe; và vâng, tôi cần thêm các đoạn sông, đoạn đường sắt, v.v. để "tàu hoàn thành". Tôi chỉ cần "xấp xỉ đầu tiên" của các khối, không phải là một cấu trúc hoàn chỉnh và tự động của chúng.
Peter Krauss

Tôi đoán anh ấy sẵn sàng nhận khối hoặc khu vực dựa trên ranh giới đường phố. Không một lô đô thị cho một tài sản duy nhất. Một giải pháp có thể là lấy mẫu lại một người đi bộ vẽ biểu tượng tại điểm bắt đầu và bắt đầu đi về hướng bên phải cho đến khi anh ta quay lại nơi bắt đầu nơi anh ta vẽ biểu tượng. Vì vậy, bạn sẽ nhận được một đa giác hoặc ranh giới kín.
cavila

Câu trả lời:


7

Tập ST_Polygonizehợp trong PostGIS sẽ trả về một geometry_dumpchứa tất cả các đa giác có thể được hình thành bởi một tập hợp các dòng. Tôi giả sử ID khối được hiển thị trong ví dụ của bạn không liên quan đến ID của công việc xếp hàng đầu vào. Nếu đây là trường hợp, bạn có thể nhận được đa giác và ID của mình với:

SELECT (st_dump).path[1] as poly_id, (st_dump).geom FROM
    (SELECT ST_Dump(ST_Polygonize(geom)) FROM 
        (SELECT ST_Union(geom) as geom FROM lines) mergedlines) polys

Phần chậm ở đây là ST_Union. Có vẻ như điều này sẽ hoạt động mà không có cuộc gọi đó, miễn là các dòng đầu vào được gật đầu đúng cách, nhưng tôi đã không thành công khi làm như vậy.

Một bộ đệm âm sẽ không đưa ra kết quả chính xác được hiển thị trong ví dụ của bạn, bởi vì các đường cụt sẽ bị bỏ qua bởi quá trình đa giác hóa. Nhưng bạn có thể lấy một bộ đệm tích cực của các đường kẻ ban đầu và sử dụng ST_Differenceđể loại bỏ khu vực đó khỏi các đa giác khối.

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.