¿Buscas el manual del generador de geometría QGIS?

8

Me gustaría crear algunos mapas de flujo como los que se muestran en la publicación de Underdark: https://anitagraser.com/2016/12/18/details-of-good-flow-maps/

Tengo un conjunto de puntos de ubicación, digamos 50, y me gustaría crear un mapa de " todos los puntos a uno " para cada punto, por lo tanto, 50 mapas en este ejemplo. Y otro conjunto de mapas de " un punto para todos " para cada punto, entonces 50 mapas más.

En lugar de crear todas las capas de líneas adicionales, me gustaría lograr esto utilizando una combinación de símbolos de Atlas y Geometry en QGIS.

Sin embargo, no encuentro muchos ejemplos para ver cómo o si puedo hacerlo.

Entonces, ¿hay un sitio donde pueda encontrar un conjunto exhaustivo de ejemplos de generador de geometría QGIS?

Este es un clip de la salida filtrada que muestra solo las 10 líneas superiores de cada punto. Creé todas las líneas de un csv con las coordenadas del punto usando un WKT. Las flechas y los símbolos de puntos se crean con el generador de geometría. El resto está controlado por Atlas.

ingrese la descripción de la imagen aquí

Albert
fuente

Respuestas:

8

No hay tal sitio hasta ahora. La característica es bastante nueva y los ejemplos de uso apenas comienzan a surgir ahora.

Para su caso de uso específico, todavía recomendaría crear una capa de línea con todas las conexiones. Luego puede filtrar esta capa usando Atlas y no necesita preocuparse por nada más.

bajo oscuro
fuente
6

Esto es posible utilizando un 'generador de geometría' diferente al que originalmente pretendía, sospecho. Puede evitar tener que generar la capa de línea de todas las conexiones utilizando una capa virtual:

Algunos puntos:

puntos de muestra

Agregue una capa virtual usando el siguiente SQL: JOIN hace coincidir cada punto entre sí, y la geometría de la línea se genera usando la función Spatialite MakeLine :

SELECT s.id 'ID1', c.id 'ID2' , MakeLine(s.geometry,c.geometry) 'geometry'
  FROM SamplePoints AS s JOIN SamplePoints AS c 
  WHERE s.id <> c.id

El resultado:

Puntos con líneas de conexión

Esta tabla virtual podría filtrarse dinámicamente utilizando la funcionalidad Atlas.

Generar dinámicamente líneas curvas sería más complicado, pero aún debería ser posible. Curvarlos de una manera cartográfica apropiada (considerando la distribución de las otras líneas) probablemente esté más allá de lo que se puede lograr con capas virtuales.

Actualizar:

Con un poco de retoques y mucha referencia a la lista de funciones de Spatialite, he generado líneas curvas:

Puntos con líneas de conexión curvas.

La capa virtual SQL para esto está abajo. Tenga en cuenta que se muestran todas las permutaciones, y la inversión del orden de la ubicación inicial y final genera la curva complementaria.

SELECT s.id 'ID1', c.id 'ID2' , 
MakeArc(
    X(Project(MakePoint((X(s.geometry)+X(c.geometry))/2,(Y(s.geometry)+Y(c.geometry))/2),distance(s.geometry,c.geometry),Azimuth(s.geometry,c.geometry) - PI()/2)),
    Y(Project(MakePoint((X(s.geometry)+X(c.geometry))/2,(Y(s.geometry)+Y(c.geometry))/2),distance(s.geometry,c.geometry),Azimuth(s.geometry,c.geometry) - PI()/2)),
    distance(s.geometry,c.geometry) * 1.1180339887,
    90 - azimuth(Project(MakePoint((X(s.geometry)+X(c.geometry))/2,(Y(s.geometry)+Y(c.geometry))/2),distance(s.geometry,c.geometry),Azimuth(s.geometry,c.geometry) - PI()/2),s.geometry) * (180/PI()),
    90 - azimuth(Project(MakePoint((X(s.geometry)+X(c.geometry))/2,(Y(s.geometry)+Y(c.geometry))/2),distance(s.geometry,c.geometry),Azimuth(s.geometry,c.geometry) - PI()/2),c.geometry) * (180/PI()),
    27700,
    2) 'geom' /*line:27700*/
  FROM SamplePoints AS s JOIN SamplePoints AS c 
  WHERE s.id <> c.id
Andy Harfoot
fuente