Cách hiệu quả để phát hiện các nút giao thông đường bộ trên bản đồ là gì?


14

Tôi có thể nhận bản đồ từ bất kỳ nguồn nào cho dự án của mình và đối với thuật toán C ++ mà tôi đang tạo, thuật toán bắt buộc phải biết vị trí các nút giao thông đường bộ (các nút có nhiều hơn hai đoạn đường gặp nhau). Ngoài ra, trong nhiều bản đồ tôi nhận được, có những con đường bị quá mức và không được khởi động (tức là: đường không được kết nối đúng cách). Một cách để khắc phục sự cố là 'dọn dẹp' mạng lưới đường bằng Autocad. Những câu hỏi tôi có là:

  1. Có cách nào hiệu quả (có phần mềm nào có thể làm được không?) Để lấy bản đồ của tôi ở định dạng GML, có chứa thông tin về các nút giao thông đường bộ trên bản đồ? (có thể có thẻ GML cho biết một nút cụ thể là một điểm nối)
  2. Có cách nào khác để 'dọn dẹp' mạng lưới đường không?

Các đồng nghiệp đã đề xuất FME, nhưng điều đó liên quan đến việc viết kịch bản và chúng tôi không chắc chắn về việc liệu kịch bản có đủ linh hoạt để phục vụ cho tất cả các bản đồ hay không. Cách duy nhất khác để phát hiện các nút giao là sử dụng lực lượng vũ phu và tìm đoạn đường nào có nút chung. ArcGIS sẽ giúp đỡ? (chưa sử dụng nó, nhưng đã nghe về nó) Tôi chắc chắn nên có một cách tốt hơn ...


2
Có cần tìm đường tự giao nhau không? Làm thế nào nó nên xử lý hình học thoái hóa (polylines nơi tất cả các đỉnh trùng nhau do đó có chiều dài bằng không). Làm thế nào nó nên xử lý các đường trùng khớp trong đó giao điểm là một đoạn tuyến tính và không chỉ là một điểm?
Kirk Kuykendall

@Kirk: Tôi hơi sốc trước những tình huống bạn đã đề cập. Tôi mới biết về GIS và thậm chí còn không biết rằng những khả năng như vậy đã tồn tại. Giao lộ 1.Self yêu cầu nhiều phân khúc. Trừ khi đó là cầu vượt, tôi sẽ coi những giao lộ đó là điểm giao nhau. 2. Tôi thậm chí không thể hình dung được hình học suy biến là gì, vì vậy tôi không biết phải trả lời gì. 3. Đường trùng khớp nên được coi là hai con đường riêng biệt bởi vì đó là cách tôi cho rằng chúng cũng sẽ ở ngoài đời.
Nav

Câu trả lời:


9

Nếu bạn có các đường ở dạng không gian, chẳng hạn như Shapefile, bạn có thể tải chúng vào PostGIS và để nó tự động tìm những đường đó bằng truy vấn SQL. Tôi đã làm điều này trước đây - câu lệnh SQL được thiết kế để tìm cho mỗi con đường giao nhau về mặt địa lý và tạo một điểm nút cho mỗi lần đi qua.

Tôi sẽ cố gắng làm sạch điều này sau, nhưng đây là luồng cơ bản bạn có thể thực hiện ...

for line in road_layer_lines:
    ilines = get_intersecting_objects(line)
    for iline in ilines:
        road_junctions.extend(get_intersection(line, iline))

Các hàm ST_ * là những gì làm cho công việc này hoạt động trong PostGIS

  • ST_En phong bì : Lấy hộp giới hạn của hình học đã cho - cái này được sử dụng để tăng tốc thuật toán. Người ta có thể thu hẹp tìm kiếm địa lý với các hộp giới hạn trong một đường chuyền nhanh nhưng kém chính xác và sau đó quét kết quả với hình học thực tế.
  • ST_Intersects : Xác định nếu hai hình học cắt nhau
  • ST_Intersection : Trả về giao điểm của hai hình học

Sau đây chỉ là những đoạn trích vì tôi không có thời gian để hoàn thành, có lẽ ai đó có thể chỉnh sửa nó trước khi tôi quay lại đây ...

SELECT id, the_geom FROM road_lines
SELECT roads.id FROM road_lines roads WHERE ST_Intersects(roads.the_geom, my_geom)
SELECT ST_Intersection(roads.the_geom, my_geom) FROM road_lines roads WHERE roads.id = my_id

Chỉ chia sẻ: Một cơ sở dữ liệu khác mà tôi đã gặp là đây - < oracle.com/technetwork/database/ber siêudb / overview / index.html >. Rõ ràng các truy vấn rất nhanh vì các truy vấn có sẵn dưới dạng các thư viện có thể được nhúng trong ứng dụng.
Nav

1
@ dmsnell- Có lẽ bạn có thể cung cấp một ví dụ về loại truy vấn SQL được sử dụng để thực hiện nhiệm vụ này?
RyanKDalton-OffTheGridMaps

11

Bạn có thể phân tích polylines theo những cách tuyệt vời bằng cách sử dụng bộ đệm. Điều này thường không hiệu quả - bộ đệm tạo ra nhiều đỉnh bổ sung - nhưng (a) nó là một kỹ thuật có sẵn trong nhiều GIS (dựa trên vectơ hoặc raster) và (b) đôi khi nó có thể tạo ra thông tin khó có được.

Trong trường hợp này, việc đệm đường bằng một lượng nhỏ và sau đó được đệm bởi âm của cùng một lượng sẽ để lại những "hòn đảo" nhỏ xung quanh tất cả các khúc cua xung quanh tất cả các giao lộ. Điều này là dễ dàng để chứng minh hình học.

Dưới đây là ví dụ về bộ đệm polyline 10 m (màu xám) và bộ đệm -10 m (màu đỏ nhạt) trong bản đồ rộng 650 m:

Hình 1

Bây giờ giao cắt lớp đa tuyến ban đầu với các đa giác đảo này, hợp nhất các phân đoạn theo mã định danh đảo và đếm các mảnh:

Hình 2

Các phân đoạn màu vàng nhạt chỉ định các phần có số lượng cao và các phần màu lục lam tối chỉ định các phần có số lượng thấp. Theo cách này, chúng tôi đã (a) tìm thấy tất cả các khúc cua và giao lộ (bao gồm cả giao điểm tự) và gần các nút giao (xem cực bên trái, nơi hai đoạn không hoàn toàn gặp nhau)) và (b) phân biệt các khúc cua với các giao lộ. Chúng ta có thể tìm thấy các điểm gần như bằng cách chọn các đảo có chứa hai hoặc nhiều phân đoạn được kết nối: các khúc cua chỉ chứa các phân đoạn được kết nối.

Do tính đối xứng của bộ đệm, trọng tâm của các đảo giao nhau là các điểm giao nhau.

Một khía cạnh đẹp của phong cách phân tích này là nó không quan tâm đến cách đa tuyến cơ bản được thể hiện: nó có thể là một tính năng duy nhất, nó có thể là một tính năng cho mỗi phân đoạn dòng hoặc bất kỳ thứ gì ở giữa.


6

Có, bạn có thể làm điều này với FME chắc chắn. Có nhiều "máy biến thế" xử lý dọn dẹp, giao lộ và cấu trúc liên kết; Tôi sẽ thử biến áp TopologyBuilder trong trường hợp này.

Bất kỳ kịch bản nào đều được thực hiện trong một môi trường đồ họa, vì vậy nó rất đơn giản để thực hiện.

Bạn luôn có thể nhận phiên bản dùng thử từ www.safe.com

(Tiết lộ: Mark Ireland, còn gọi là Nhà truyền giáo FME, Safe Software Inc.)


Tôi thứ hai này. FME rất tốt cho vấn đề đặc biệt này, cả việc chuyển đổi từ AutoCAD sang GML và dọn dẹp cấu trúc liên kết. Nó có thể là phổ quát đáng kinh ngạc trong ứng dụng của nó.
blord-castillo


-1

Nhà phân tích mạng Arcgis, bạn có thể nhận được bản dùng thử miễn phí, thực hiện việc này trong chưa đầy 10 giây và chỉ với vài cú nhấp chuột.


-1

Quá trình có thể được thực hiện trong ArcGIS với nhà phân tích mạng.

Ngoài ra còn có một cách khác trong ArcGIS: bạn có thể thực hiện các bước theo dõi: "Arctoolbox" → "Công cụ quản lý dữ liệu" → "tính năng" → "tính năng từ đỉnh đến điểm" và ở đó bạn có thể làm những gì bạn cần.

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.