Як я можу злити / обвалити довколишні та паралельні дороги (наприклад, проїжджу частину проїзної частини) в одну єдину лінію?


23

У мене є OSM-файл форми, який містить усі дороги в місті. Більш великі дороги (як подвійні проїжджі), здається, мають дві паралельні лінії. Мені хотілося б згорнути / об'єднати їх у 1 рядок, щоб я міг експортувати їх та виводити їх у зовнішній 3D-додаток (2 дороги, що перекриваються, будуть складними та виглядатимуть дивно в 3D).

Як я можу досягти цього за допомогою QGIS або PostGIS? Мене не турбує незначна втрата точності (в межах декількох метрів), і я хотів би, щоб отримана одна лінія була між (в ідеалі центром) поточної, паралельної лінії.

Дякую.

(ось приклад подвійних дорожніх ліній, які я хочу поєднати)

введіть тут опис зображення

Відповіді:


3

ESRI має обвал подвійної проїзної частини до центральної лінії. Ви можете отримати дешеву версію для використання з OSM. В іншому випадку ви можете вибрати функції та зберегти як новий шар. Видалити вибраний з шару, який ви використовували для експорту. Функція буфера в межах однієї сторони проїжджої частини, яка включає другу смугу. Об’єднайте формулярного файлу з оригінальним, з'єднайте будь-яку розбиту топологію.

Якщо ви можете кодувати та / або скрипт, ви можете провести середню лінію між смугами на вузлі по сегменту за узгодженням і вивести програмну програму в центральній лінії, а потім програмно видалити вибрані функції, використовувані для виробничого процесу, перевірити та виправити зламану топологію, і ви зроблено.

Я знайшов зразок коду arcpy, до якого я включаю, як знайти посилання нижче в коментарях.

приписується довідці 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, "")

Ви можете, будь ласка, зв’язати інструмент обвалення ESRI до центральної лінії? Я не міг його знайти. Єдине, що я міг знайти, це розділ «Редагування подвійних проїжджої частини» на цій сторінці .
Fezter

ArcGIS допомогу генерує Унікальні посилання , які не роблять ніяких посилань в якості подовжень посилання я бачу, так що ... перейти до resources.arcgis.com/en/help/main/10.1/index.html і пошук Collapse Dual Lines Для лінії (покриття) в оригінальне посилання вийшло з обговорення і може бути невірним, оскільки вам потрібен ArcGIS for Desktop Advanced: Потрібна установка ArcInfo Workstation
lewis

1
Більшість користувачів не повинні використовувати інструмент "Покриття" (для чого потрібна Workstation), якщо тільки явно не працює з даними покриття Arc7. Натомість в більшості випадків використовуйте Згорнути подвійні лінії до центральної лінії (картографії) .
RyanDalton

2

Ви можете спробувати використовувати Скелетрон Майка Мігурського . Це інструмент з відкритим кодом, який він використовує для таких речей, як стиль стилю карти Terrain.


1

Можливо, це не дуже елегантне рішення, і воно засноване на методі відповіді на питання: /gis//a/295348/120129 .

Це один із варіантів вирішення вашого питання, встановити геоінструмент (для мене це дорога з назвою "road_border" шириною 11 м, тип - лінія (MultiLineString)),

запустити геоінструмент :-),

WITH 
      tbla AS (SELECT id, ((ST_DumpPoints(geom)).geom) geom FROM road_border),
      tblb AS (SELECT (ST_Buffer((ST_Dump(geom)).geom, 0.0001)) geom FROM tbla),
      tblc AS (SELECT ST_Centroid(ST_UnaryUnion(Unnest(ST_ClusterWithin(geom, 0.0001)))) geom FROM tblb),
      tbld AS (SELECT ((ST_Dump(ST_DelaunayTriangles(ST_Collect(geom)))).geom) geom FROM tblc),
      tble AS (SELECT (ST_Boundary(geom)) geom FROM ST_Dump((SELECT ST_Polygonize(geom) geom FROM (SELECT ST_Union(geom) geom FROM
      (SELECT ST_ExteriorRing(geom) geom FROM tbld) AS lines) AS foo))),
      tblf 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 tble) AS geom),
      tblj 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) geom FROM tblf a JOIN tblj b ON ST_Within (a.geom, b.geom);

і побачити результат.

Успіхів усім :-),

Оригінальні рішення ...

Цей сценарій називається - ST_RoadAxisFromDelaunayTriangulation ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.