Renderizar líneas superpuestas

22

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

El problema es que muchas de las líneas tienen partes superpuestas, donde más de una línea de tranvía cubre la misma sección. Para mostrar esto al usuario, prefiero que las líneas se ejecuten paralelas entre sí en lugar de dibujarse una encima de la otra. Para ver un ejemplo, vea cómo Google Maps muestra las líneas del metro de Nueva York.

Sospecho que este es un problema bastante común en cartografía, pero no sé qué terminología debería buscar.

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

    
pregunta Liedman 26.08.2010 - 16:33

5 respuestas

7

Si está interesado en obtener más información sobre esta área, el problema se denomina desplazamiento cartográfico y es un aspecto de generalización cartográfica .

Un par de artículos que analizan el desplazamiento y los enfoques para manejar el problema:

respondido por el scw 26.08.2010 - 19:12
4

Este problema es muy típico en generalización cartográfica. Existen métodos automatizados para eso, pero todavía no hay implementaciones disponibles.

Métodos basados en " vigas " y " Snakes " dan resultados eficientes para resolver estos conflictos cartográficos de datos de la red (vea también las referencias dadas por < a href="https://gis.stackexchange.com/questions/1493/rendering-overlapping-lines/1496#1496"> scw ). Aquí hay algunos resultados de los algoritmos de vigas en datos de carreteras:

Antes:

Después:

Consulte también este documento y este presentación que explica cómo hacer esta transformación .

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

    
respondido por el julien 31.08.2010 - 11:48
1

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

    
respondido por el Mark Ireland 26.08.2010 - 19:14
1

En las implementaciones actuales, a menudo puede encontrar "Desplazamiento" o "Dislocación". Usando tu pila actual, parece un poco difícil lograr líneas paralelas automáticamente:

Para resumir: la forma más fácil que conozco sería utilizar UMN Mapserver y el valor de compensación allí. Estilo de ejemplo para su archivo de mapas:

STYLE
 SYMBOL 7
 OUTLINECOLOR 160 160 160
 SIZE 5
 OFFSET 2 -99 # <-- This will offset the line to the right.
 ANTIALIAS FALSE
END # STYLE
    
respondido por el underdark 26.08.2010 - 18:05
0

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

  1. Ancho: puede variar el ancho de línea entre las capas y colocar las líneas más anchas en la parte inferior.
  2. Opacidad / Transparencia: puede hacer que las capas de línea individuales sean parcialmente opacas, por lo que puede "ver a través" de capas individuales.
  3. Desplazamiento: puede desplazar el símbolo de línea que representa la entidad de línea real a 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 se pueden representar mediante una serie de símbolos de puntos con un espacio definido entre los símbolos. Al variar el símbolo, el color del símbolo, el tamaño del símbolo y el espacio entre las diferentes capas de línea, debe hacer que cada capa de línea individual sea distinguible.

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

    
respondido por el DavidF 26.08.2010 - 17:07

Lea otras preguntas en las etiquetas