Saltar al contenido

¿Está buscando el manual del generador de geometría de QGIS?

Esta es el arreglo más correcta que encomtrarás compartir, pero obsérvala detenidamente y analiza si se puede adaptar a tu trabajo.

Solución:

No existe tal sitio hasta el momento. La función es bastante nueva y los ejemplos de uso apenas comienzan a surgir ahora.

Para su caso de uso específico, aún 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.

Sospecho que esto es posible usando un ‘generador de geometría’ diferente al que originalmente pretendía. Puede evitar tener que generar la capa de línea de todas las conexiones usando una capa virtual:

Algunos puntos:

puntos de muestra

Agregue una capa virtual usando el siguiente SQL: JOIN hace coincidir todos los puntos 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 luego filtrarse dinámicamente usando la funcionalidad Atlas.

La generación dinámica de líneas curvas sería más complicada, pero aún debería ser posible. Curvarlas de una manera cartográficamente apropiada (considerando la distribución de las otras líneas) probablemente esté más allá de lo que se puede lograr con las 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

El SQL de la capa virtual para esto se encuentra a continuación. Tenga en cuenta que se muestran todas las permutaciones y que invertir el 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

Te invitamos a amparar nuestra función escribiendo un comentario y dejando una puntuación te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *