Làm cách nào tôi có thể hợp nhất / thu gọn các tuyến đường gần đó và song song (ví dụ: đường hai chiều) thành một đường duy nhất?


23

Tôi có một shapefile từ OSM chứa tất cả các con đường trong thành phố. Những con đường lớn hơn (như đường đôi) dường như có 2 đường song song. Tôi muốn thu gọn / kết hợp những thứ đó thành 1 dòng để tôi có thể xuất và kết xuất chúng một cách độc đáo trong một ứng dụng 3D bên ngoài (2 đường chồng chéo sẽ phức tạp và sẽ trông lạ trong 3D).

Làm cách nào tôi có thể đạt được điều này với QGIS hoặc PostGIS? Tôi không lo lắng về việc mất một chút độ chính xác (trong vòng vài mét) và muốn kết quả, một dòng duy nhất nằm giữa (lý tưởng là trung tâm) của các đường song song hiện tại.

Cảm ơn bạn.

(đây là một ví dụ về các đường đôi mà tôi muốn kết hợp)

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

Câu trả lời:


3

ESRI có một đường đôi thu gọn đến công cụ đường trung tâm. Bạn có thể có được một phiên bản giá rẻ để sử dụng với OSM. Nếu không, bạn có thể chọn các tính năng và lưu dưới dạng một lớp mới. Xóa chọn từ lớp bạn sử dụng để xuất. Tính năng đệm trong phạm vi của một bên của làn đường bao gồm làn thứ hai. Hợp nhất shapefile với bản gốc, kết nối bất kỳ cấu trúc liên kết bị hỏng.

Nếu bạn có thể mã hóa và / hoặc tập lệnh, bạn có thể lấy trung bình một đường giữa các làn trên một nút theo cách biệt bằng cách khớp nút và đưa ra một chương trình trung tâm và sau đó lập trình xóa các tính năng được chọn sử dụng cho quy trình sản xuất, kiểm tra và sửa chữa cấu trúc liên kết bị hỏng và bạn làm xong.

Tôi tìm thấy một mẫu mã Arcpy tôi đang bao gồm, làm thế nào để tìm liên kết dưới đây trong các ý kiến.

được quy cho Trợ giúp ESRI ARCGis

# Name: CollapseDualLinesToCenterline_Example.py
# Description: Creates street centerlines from a street casing coverage.
# Requirements: ArcInfo Workstation

# Import system modules
import arcpy
from arcpy import env

# Set environment settings
env.workspace = "C:/data"

# Set local variables
inCover = "streets"
outCover = "C:/output/centerlines"
maximumWidth = 50

# Execute CollapseDualLinesToCenterline
arcpy.CollapseDualLinesToCenterline_arc(inCover, outCover, maximumWidth, "")

bạn có thể vui lòng liên kết đến sự sụp đổ ESRI đến công cụ trung tâm không? Tôi không thể tìm thấy nó. Điều duy nhất tôi có thể tìm thấy là phần Chỉnh sửa đường dẫn kép của trang này .
Fezter

ArcGIS giúp tạo các liên kết duy nhất không tham chiếu dưới dạng liên kết được phân loại mà tôi thấy, vì vậy ... hãy truy cập resource.arcgis.com/en/help/main/10.1/index.html và tìm kiếm Thu gọn Dual Lines To Centerline (Bảo hiểm) liên kết ban đầu đến từ một cuộc thảo luận và có thể sai khi bạn cần ArcGIS for Desktop Advanced: Yêu cầu ArcInfo Workstation được cài đặt
lewis

1
Hầu hết người dùng không nên sử dụng công cụ "Bảo hiểm" (yêu cầu Workstation), trừ khi làm việc với dữ liệu bảo hiểm Arc7 một cách rõ ràng. Thay vào đó, hãy sử dụng Thu gọn Dual Lines To Centerline (Bản đồ) trong hầu hết các trường hợp.
RyanDalton

2

Bạn có thể thử sử dụng Skeletron của Mike Migurski . Đó là một công cụ nguồn mở mà anh ta sử dụng cho những thứ như phong cách bản đồ Địa hình của mình.


1

Có thể đó không phải là một giải pháp rất thanh lịch và nó dựa trên phương pháp trả lời câu hỏi: /gis//a/295348/120129 .

Đây là một trong những biến thể của việc giải quyết câu hỏi của bạn, thiết lập một địa lý địa lý (đối với tôi đó là một con đường có tên "road_border" rộng 11 m, loại - đường (MultiLineString)),

chạy một địa lý :-),

WITH ta AS (SELECT id, ((ST_DumpPoints(geom)).geom) as geom FROM road_border), tb as (SELECT (ST_Buffer((ST_Dump(geom)).geom, 0.0001)) geom FROM ta), tc as (SELECT ST_Centroid(ST_UnaryUnion(Unnest(ST_ClusterWithin(geom, 0.0001)))) geom FROM tb), td as (SELECT ((ST_Dump(ST_DelaunayTriangles(ST_Collect(geom)))).geom) geom FROM tc), te as (SELECT (ST_Boundary(geom)) geom FROM ST_Dump((SELECT ST_Polygonize(geom) AS geom FROM (SELECT ST_Union(geom) AS geom FROM (SELECT ST_ExteriorRing(geom) AS geom FROM td) AS lines) as foo))), tf as (SELECT ST_MakeLine(p1,p2) geom FROM (SELECT ST_PointN(geom, generate_series(1, ST_NPoints(geom)-1)) p1, ST_PointN(geom, generate_series(2, ST_NPoints(geom))) p2 FROM te) AS geom), tj as (SELECT ST_Buffer((ST_Dump(ST_Union(ST_Buffer(geom, 0.0005)))).geom, -0.0005) geom FROM road_border) SELECT ST_Intersection (a.geom, b.geom) AS geom FROM tf as a JOIN tj as b ON ST_Within (a.geom, b.geom);

và xem kết quả.

PS Tôi sẽ đặt tên cho công cụ này - ST_RoadAxisFromDelaunayTriangulation. Hệ điều hành ...

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.