1 votos

Concatenando nombres de los distritos y los números de las secciones en la capa poligonal de calles basado en intersección

introducir descripción de la imagen aquíEn QGIS 3.14 quiero que para una capa con contornos de calles (polígonos) se registren los nombres de las áreas por las que pasa la calle y los números de las parcelas catastrales por las que pasa.

Si una calle intersecta varios objetos, sus nombres deben ser escritos en un campo después de una coma. ¿Cómo resuelvo este problema?

introducir descripción de la imagen aquí si el área del área que cae dentro de los límites de la calle es menor que el valor especificado, entonces su nombre no se tiene en cuenta

introducir descripción de la imagen aquí

0voto

ARUNBALAN NV Puntos 101

Para ampliar la consulta en esta respuesta con una regla de "área", es decir, considerar el valor solo si la intersección es mayor que cierto valor, considere una consulta ligeramente ajustada:

SELECT a.*, GROUP_CONCAT(b.info) AS concat_b_info
FROM "Layer_B" AS b, "Layer_A" As a
WHERE ST_INTERSECTS(a.geometry, b.geometry)
      AND ST_AREA(ST_INTERSECTION(a.geometry, b.geometry)) > 80000000
GROUP BY a.id

O considere en la Calculadora de Campos la siguiente expresión:

aggregate(
  layer:='Layer_B',
  aggregate:='concatenate',
  expression:="info",
  concatenator:=',',
  filter:=(intersects($geometry,geometry()) AND area(intersection($geometry,geometry())) > 80000000)
)

Tenga en cuenta que la función 'area'

Devuelve el área de un objeto de polígono geométrico. Los cálculos son siempre planimétricos en el Sistema de Referencia Espacial (SRS) de esta geometría, y las unidades del área devuelta coincidirán con las unidades para el SRS. Esto difiere de los cálculos realizados por la función $area, que realizará cálculos elipsoidales basados en el elipsoide del proyecto y la configuración de unidad de área.

Cuando sea necesario calcular adicionalmente las áreas de las entidades superpuestas, use esto

SELECT a.*, GROUP_CONCAT(b.info) AS concat_b_info,
            GROUP_CONCAT(round(ST_AREA(ST_INTERSECTION(a.geometry, b.geometry)), 4)) AS a_b_areas
            -- GROUP_CONCAT(round(ST_AREA(b.geometry), 4)) AS b_areas
FROM "Layer_B" AS b, "Layer_A" As a
WHERE ST_INTERSECTS(a.geometry, b.geometry)
      AND ST_AREA(ST_INTERSECTION(a.geometry, b.geometry)) > 80000000
GROUP BY a.id

o en la Calculadora de Campos con un nuevo campo para los valores de área:

aggregate(
  layer:='Layer_B',
  aggregate:='concatenate',
  expression:=to_string(round(area(intersection($geometry,geometry())),4)),
  # expression:=to_string(round(area($geometry),4)),
  concatenator:=',',
  filter:=(intersects($geometry,geometry()) AND area(intersection($geometry,geometry())) > 80000000)
)

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