¿Cómo puedo fusionar / colapsar líneas de carreteras cercanas y paralelas (por ejemplo, una autovía) en una sola línea?

23

Tengo un archivo shape de OSM que contiene todos los caminos dentro de una ciudad. Las carreteras más grandes (como las autovías) parecen tener 2 líneas paralelas. Me gustaría colapsar / combinarlos en 1 línea para poder exportarlos y renderizarlos bien en una aplicación 3D externa (2 caminos superpuestos serán complicados y se verán raros en 3D).

¿Cómo puedo lograr esto con QGIS o PostGIS? No estoy preocupado por una ligera pérdida de precisión (dentro de unos pocos metros) y me gustaría que la línea única resultante esté entre (idealmente el centro de) las líneas paralelas actuales.

Gracias.

(Aquí hay un ejemplo de las líneas de carreteras duales que quiero combinar)

ingrese la descripción de la imagen aquí

Robin Hawkes
fuente

Respuestas:

3

ESRI tiene un colapso de la autovía a la herramienta de la línea central. Puede obtener una versión barata para usar con OSM. De lo contrario, podría seleccionar entidades y guardarlas como una nueva capa. Eliminar seleccionado de la capa que utilizó para la exportación. Función de amortiguación dentro del alcance de un lado de la calzada que incluye el segundo carril. Combine shapefile con original, conecte cualquier topología rota.

Si puede codificar y / o escribir un script, puede promediar una línea central entre carriles en un nodo seg por la coincidencia de nodo y generar una línea central programáticamente y luego eliminar programáticamente las funciones seleccionadas utilizadas para el proceso de producción, verificar y corregir la topología rota, y estará hecho.

Encontré una muestra de código arcpy que estoy incluyendo, cómo encontrar el enlace a continuación en los comentarios.

atribuido a ESRI ARCGis Ayuda

# 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, "")
ametralladora
fuente
¿podría vincular a la herramienta de colapso de ESRI a la línea central? No pude encontrarlo. Lo único que pude encontrar fue la sección Edición de autovías de esta página .
Fezter
La ayuda de ArcGIS genera enlaces únicos que no hacen referencia como un enlace adaptado que veo, así que ... vaya a resources.arcgis.com/en/help/main/10.1/index.html y busque Contraer líneas duales a la línea central (Cobertura) el enlace original surgió de una discusión y puede ser incorrecto, ya que necesita ArcGIS for Desktop Advanced: requiere la instalación de ArcInfo Workstation
lewis
1
La mayoría de los usuarios no deberían usar la herramienta "Cobertura" (que requiere estación de trabajo), a menos que trabajen con datos de cobertura de Arc7, explícitamente. En su lugar, use Contraer líneas duales a línea central (cartografía) en la mayoría de los casos.
RyanDalton
2

Usted podría tratar de usar de Mike Migurski Skeletron . Es una herramienta de código abierto que utiliza para cosas como su estilo de mapa de terreno.

Sargento
fuente
1

Tal vez no sea una solución muy elegante y se base en el método de respuesta a la pregunta: /gis//a/295348/120129 .

Es una de las variantes para resolver su pregunta, configurar un geoinstrumento (para mí es una carretera con el nombre "road_border" de 11 m de ancho, tipo - línea (MultiLineString)),

ejecutar un geoinstrumento :-),

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);

y ver el resultado.

Buena suerte a todos :-),

Soluciones originales ...

Este script se llama - ST_RoadAxisFromDelaunayTriangulation ...

Cirilo
fuente