25 votos

Renderizado de líneas superpuestas

Estoy haciendo un mapa con información sobre el transporte público: autobuses, tranvías, etc. El mapa tendrá una capa que contendrá, por ejemplo, las líneas de tranvía. Cada línea tiene su propio color, y se representa mediante una geometría de cadena de líneas.

El problema es que muchas de las líneas tienen partes que se solapan, donde más de una línea de tranvía cubre la misma sección. Para mostrar esto al usuario, preferiría que las líneas discurrieran paralelas entre sí en lugar de estar dibujadas unas encima de otras. Para ver un ejemplo, vea cómo Google Maps muestra las líneas de metro de Nueva York.

Sospecho que se trata de un problema bastante común en cartografía, pero no sé qué terminología debo buscar.

Estoy usando PostGIS/GeoServer/OpenLayers como mi pila, pero cualquier solución de código abierto sería aceptable.

6voto

Robert Höglund Puntos 5572

Si le interesa saber más sobre este tema, el problema se llama desplazamiento cartográfico y es un aspecto de generalización cartográfica .

Un par de artículos sobre el desplazamiento y los enfoques para tratar el problema:

4voto

Paul G Puntos 1615

Este problema es muy típico de la generalización cartográfica. Existen métodos automatizados para ello, pero aún no hay ninguna aplicación disponible.

Métodos basados en " Vigas " y " Serpientes " ofrecen resultados eficaces para resolver estos conflictos cartográficos de datos de red (véanse también las referencias dadas por scw ). He aquí algunos resultados de los algoritmos de haces sobre datos de carreteras:

Antes:

alt text

Después:

alt text

Ver también este documento y esto presentación que explican cómo hacer esta transformación .

EDIT: Nunca lo he probado, pero parece que hay algo relacionado con las serpientes en GRASS. Ver aquí .

1voto

tobes Puntos 19

En las implementaciones actuales, a menudo se puede encontrar "Desplazamiento" o "Desplazamiento". Usando la pila actual, parece un poco difícil conseguir líneas paralelas automáticamente:

Resumiendo: La forma más fácil que conozco sería utilizar UMN Mapserver y el valor Offset allí. Ejemplo de estilo para su mapfile:

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

1voto

MobileCushion Puntos 217

No conozco la solución, pero creo que el término que buscas es "resolución de conflictos", un tema de generalización cartográfica. Una búsqueda en Google sobre "conflictos de generalización de mapas" muestra información interesante, pero no sé si tiene mucha utilidad práctica.

0voto

Josh Puntos 569

Si está dibujando capas de líneas que se superponen, tiene varias opciones para permitir que el espectador vea todas las líneas.

  1. Anchura - se varía la anchura de línea entre capas y se ponen las líneas más anchas en la parte inferior.
  2. Opacidad/Transparencia: puede hacer que las capas de líneas individuales sean parcialmente opacas, de modo que pueda "ver a través" de las capas individuales.
  3. Desplazamiento: puede desplazar el símbolo de línea que representa la característica de línea real hacia un lado de la geometría real de la línea. Las capas individuales se pueden desplazar en diferentes cantidades y en diferentes direcciones para permitir que se vean todas las capas.
  4. Las líneas pueden representarse mediante una serie de símbolos de punto con un espacio definido entre los símbolos. Variando el símbolo, el color del símbolo, el tamaño del símbolo y la separación entre las distintas capas de líneas, debería conseguir que cada capa de líneas individual fuera distinguible.

No uso GeoServer, pero sé que MapServer tiene la funcionalidad para hacer todas estas cosas. Es probable que GeoServer también lo haga.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X