Processing math: 100%

9 votos

¿Encontrar la distancia entre los edificios y la carretera más cercana usando el QGIS?

Soy muy nuevo en el trabajo con datos de SIG. Actualmente estoy usando la herramienta QGIS para trabajar con los datos.

Tengo dos conjuntos de datos:

  1. Edificios - archivo de forma poligonal con información sobre diferentes edificios en una ciudad. Hay una columna única llamada propertyid.
  2. Carreteras - archivo de forma de línea con información sobre las diferentes carreteras de la ciudad. No hay una columna única, pero sabemos que cada línea se refiere a una carretera, así que hemos creado una columna de índice basada en @row_no.

Objetivo: Encontrar la distancia entre un edificio determinado y la carretera más cercana.

Lo que ya he intentado:

  1. Los edificios convertidos se convierten en puntos y las líneas se convierten en puntos (vértices extraídos) y ejecutar una matriz de distancia usando estos dos capas. Pero esto no me da el resultado deseado por alguna razón. Como soy muy nuevo, podría estar haciendo algo malo.
  2. Usando las mismas capas de puntos mencionadas arriba, corrió la distancia al algoritmo de centro más cercano. De nuevo, puede que haya cometido un error al hacer esto también.

Sería genial si alguien pudiera guiarme en la dirección correcta y decirme si

  • lo que estoy tratando de lograr es posible, y
  • si lo es, entonces cómo lo harías.

1 votos

¿Podría detallar los intentos que ha hecho? ¿Qué resultados obtuvo? son y ¿por qué son exactamente indeseables? Si no obtienes resultados, sino que las herramientas fallan, ¿puedes incluir los mensajes de error resultantes?

8voto

Gadget Puntos 81

Aunque, en general, esto se gestionaría mejor en PostGIS, existen plug-ins que hacen el trabajo pesado por usted:

NNÚnase a

Esta es la forma preferible y correcta, aunque podría ser lenta en conjuntos de datos grandes. Tiene la ventaja no trivial de calcular la distancia correcta entre polígonos y líneas, sin convertir primero los edificios en puntos (lo que podría llevar a resultados erróneos).

Distancia del cubo

Más rápido, pero sólo funciona con capas vectoriales de puntos.

Dado que está trabajando con un sistema local proyectado, asegúrese de comprobar el Layer Units opción.

Se creará una capa de salida, con líneas que conectan cada edificio con la carretera más cercana. También puede elegir una capa de puntos como salida (un punto por edificio)

0 votos

Gracias por esta respuesta. Estoy intentando descargar PostGIS. ¿Hay algún enlace directo para Windows 10? Vi su sitio web y estaba bastante confundido en cuanto a qué método a seguir. ¿Podría indicarme el enlace correcto? Gracias de antemano.

3 votos

¿Has probado con las dos opciones indicadas en la respuesta? Ninguna de ellas requiere PostGIS. ;)

6voto

John Feminella Puntos 123

Para qgis 3.8 y posteriores se puede utilizar "join by nearest" desde la caja de herramientas de procesamiento.

3voto

ARUNBALAN NV Puntos 101

Puedo sugerir el uso de un "Capa virtual" a través de Layer > Add Layer > Add/Edit Virtual Layer...

Supongamos que tenemos 10 funciones en 'buildings' y 16 en 'roads' en consecuencia, véase la imagen de abajo.

example

Con la siguiente consulta, es posible averiguar la distancia entre un determinado edificio, por ejemplo WHERE b.propertyid = '1' y la carretera más cercana. Cuidado con el SRI.

SELECT ST_ShortestLine(ST_Centroid(b.geometry),r.geometry),
       b.propertyid,
       r."@row_nr",
       ROUND(ST_Length(ST_ShortestLine(ST_Centroid(b.geometry),r.geometry)),2) AS length
FROM roads AS r, buildings AS b
WHERE b.propertyid = '1'
GROUP BY b.propertyid
ORDER BY MIN(ST_Length(ST_ShortestLine(ST_Centroid(b.geometry),r.geometry)))

La Capa Virtual de salida generará la línea más corta entre las indicadas "propertyid" y "@row_no" con una longitud entre ellos. El cálculo se ha realizado mediante el uso de un centroide del edificio.

result1


También puede utilizar la consulta anterior sin ST_Centroid() declaración.

SELECT ST_ShortestLine(b.geometry,r.geometry),
       b.propertyid,
       r."@row_nr",
       ROUND(ST_Length(ST_ShortestLine(b.geometry,r.geometry)),2) AS length
FROM roads AS r, buildings AS b
WHERE b.propertyid = '1'
GROUP BY b.propertyid
ORDER BY MIN(ST_Length(ST_ShortestLine(b.geometry,r.geometry)))

La Capa Virtual de salida generará la línea más corta entre las indicadas "propertyid" y "@row_no" con una longitud entre ellos. El cálculo se realizó mediante el uso del vértice del objeto más cercano.

result2


Referencias:

1voto

Andrew Puntos 11

Un enfoque alternativo sería convertir los polígonos de los edificios en líneas, o nodos. A continuación, se pueden utilizar múltiples buffers para las carreteras, probablemente en incrementos de 1 metro. Unir espacialmente los dos archivos y exportar la tabla de atributos a Excel. De esta manera, se puede seleccionar la pared más cercana de un edificio. Es un método un poco complicado, pero es una manera de manejar grandes edificios.

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