Kết xuất các đường chồng chéo


24

Tôi đang tạo một bản đồ chứa thông tin về giao thông công cộng: xe buýt, xe điện, v.v. Bản đồ sẽ có một lớp chứa ví dụ như các tuyến xe điện. Mỗi dòng có màu riêng và được biểu thị bằng hình dạng chuỗi dòng.

Vấn đề là, nhiều dòng có các phần chồng chéo, trong đó có nhiều hơn một dòng xe điện bao gồm cùng một phần. Để hiển thị điều này cho người dùng, tôi muốn các đường chạy song song với nhau thay vì được vẽ lên nhau. Ví dụ: xem cách Google Maps hiển thị các tuyến tàu điện ngầm ở New York.

Tôi nghi ngờ đây là một vấn đề khá phổ biến trong bản đồ học, nhưng không biết tôi nên tìm kiếm thuật ngữ nào.

Tôi đang sử dụng PostGIS / GeoServer / OpenLayers làm ngăn xếp của mình, nhưng mọi giải pháp nguồn mở đều được chấp nhận.


Có cùng một vấn đề với tàu điện ngầm. Bạn đã tìm thấy / thực hiện một giải pháp chấp nhận được?
Geert-Jan

Tiếc là không có. Khách hàng không ưu tiên điều này và chúng tôi đã thực hiện một hack khá khó chịu để ngăn chặn sự chồng chéo.
Liedman

Câu trả lời:


7

Nếu bạn quan tâm đến việc tìm hiểu thêm về lĩnh vực này, vấn đề được đặt tên là dịch chuyển bản đồ và một khía cạnh của khái quát hóa bản đồ .

Một vài bài viết thảo luận về sự dịch chuyển và cách tiếp cận để xử lý vấn đề:


"Dịch chuyển"! Đó là thuật ngữ khác mà tôi đã cố nhớ. Chúng tôi có một công cụ trong FME (xin lỗi - không phải nguồn mở) rằng "Giải quyết xung đột giữa các tính năng bằng cách sử dụng một biến thể của thuật toán dịch chuyển Nickerson" - vậy có lẽ Google của Nickerson sẽ thấy điều gì xảy ra?
Đánh dấu Ireland

scholar.google.com.vn ném lên một liên kết đến bài viết gốc (đáng buồn trả tiền tường) và rất nhiều người tham khảo nó. Một số bài viết liên quan là miễn phí và trông thú vị.
Ian Turton

4

Vấn đề này là một vấn đề rất điển hình trong khái quát hóa bản đồ. Phương pháp tự động tồn tại cho điều đó, nhưng chưa có triển khai nào.

Các phương pháp dựa trên " Chùm " và " Rắn " cho kết quả hiệu quả để giải quyết các xung đột bản đồ dữ liệu mạng này (xem thêm các tài liệu tham khảo được cung cấp bởi scw ). Dưới đây là một số kết quả của thuật toán dầm trên dữ liệu đường bộ:

Trước:

văn bản thay thế

Sau:

văn bản thay thế

Xem thêm bài viết nàybài trình bày này giải thích làm thế nào để thực hiện chuyển đổi này .

EDIT: Tôi chưa bao giờ thử nghiệm nó, nhưng dường như có một cái gì đó liên quan đến rắn trong GRASS. Xem tại đây .


1
Điều này có hoạt động không nếu hai đoạn đường (đường ray xe buýt) có hình dạng giống hệt nhau?
underdark

1
Nó áp dụng cho các dòng quá kín và không hoạt động tốt cho các dòng trùng lặp chính xác. Một sự thích nghi là cần thiết.
julien

1

Tôi không biết về một giải pháp, nhưng tôi nghĩ thuật ngữ bạn đang tìm kiếm là "giải quyết xung đột" - một chủ đề về khái quát hóa bản đồ. Một tìm kiếm của Google về "xung đột khái quát hóa bản đồ" cho thấy một số thông tin thú vị - nhưng tôi không biết có nhiều sử dụng thực tế.


1

Trong các triển khai hiện tại, bạn thường có thể tìm thấy "Offset" hoặc "Dislocation". Sử dụng ngăn xếp hiện tại của bạn, có vẻ hơi khó để tự động đạt được các đường song song:

Tóm lại: Cách dễ nhất tôi biết là sử dụng UMN Mapserver và giá trị Offset ở đó. Kiểu ví dụ cho mapfile của bạn:

STYLE
 SYMBOL 7
 OUTLINECOLOR 160 160 160
 SIZE 5
 OFFSET 2 -99 # <-- This will offset the line to the right.
 ANTIALIAS FALSE
END # STYLE

0

Nếu bạn đang vẽ các lớp đường chồng lấp, bạn có một số tùy chọn để cho phép người xem thấy tất cả các dòng.

  1. Chiều rộng - bạn thay đổi độ rộng đường giữa các lớp và đặt các đường rộng hơn ở phía dưới.
  2. Độ mờ đục / Độ trong suốt - bạn có thể làm cho các lớp đường riêng lẻ mờ một phần, do đó bạn có thể 'nhìn xuyên qua' các lớp riêng lẻ.
  3. Offset - bạn có thể bù biểu tượng đường biểu thị tính năng đường thực tế sang một bên của hình dạng thực của đường. Các lớp riêng lẻ có thể được bù bởi số lượng khác nhau và theo các hướng khác nhau để cho phép tất cả các lớp được nhìn thấy.
  4. Các dòng có thể được biểu diễn bằng một loạt các ký hiệu điểm với khoảng cách xác định giữa các ký hiệu. Bằng cách thay đổi biểu tượng, màu biểu tượng, kích thước biểu tượng và khoảng cách giữa các lớp dòng khác nhau, bạn nên phân biệt từng lớp dòng riêng biệt.

Tôi không sử dụng GeoServer, nhưng tôi biết rằng MapServer có chức năng thực hiện tất cả những điều này. GeoServer cũng có khả năng như vậy.


Nghe có vẻ như chúng tôi muốn # 3, nhưng chỉ cho các tính năng chồng chéo. Điều đó có thể không?
mwalker

2
MapServer và các máy chủ bản đồ web khác và GIS thực hiện giải quyết xung đột cho các nhãn, nhưng tôi không biết về một tính năng cho phép bạn thực hiện việc này một cách nhanh chóng. Tất nhiên, nếu dữ liệu của bạn khá tĩnh, bạn có thể xử lý trước dữ liệu của mình để xác định nơi các đường từ các lớp khác nhau giao nhau (hoặc nằm trong dung sai) và phân loại dữ liệu dựa trên điều này. Công cụ kết xuất bản đồ của bạn sau đó có thể áp dụng hệ thống ký hiệu 'dịch chuyển' dựa trên một thuộc tính trong dữ liệu của bạn.
DavidF
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.