Pregunta:
Para la ciudad de Berlín, tengo un modelo de elevación digital como un dataset ráster 1×1 de lo que conté las pendientes y tengo datos de shapefile que contienen los contornos de los edificios. Mi objetivo es encontrar techos bajos preferiblemente con poco fraccionamiento.
Por lo tanto, eliminé todos los valores de píxeles con una pendiente superior a 3 grados. Un ejemplo del resultado se ve en la imagen. Ahora me gustaría evaluar la "calidad" de los techos, de modo que donde la mayor parte del área de píxeles planos está "conectada" como es el caso del techo del edificio de la derecha en el ejemplo frente al techo más destruido de la izquierda. . Como resultado, me gustaría clasificar los techos en poca / media / mucha destrucción.
¿Cómo abordo esto usando QGIS?
Respuesta:
Puede ejecutar "Píxeles de trama a polígonos" para convertir su trama en una capa vectorial:
Asegúrese de que sus edificios tengan una identificación única, luego ejecute "Intersección" con sus edificios:
Entonces, su tabla de atributos contiene el valor de la pendiente en grados y la identificación del edificio. Ahora agregue un nuevo campo, contando las celdas que contiene cada edificio count("buildingid","buildingid")
:
Y agregue un nuevo campo contando las celdas inferiores a 3 grados count("buildingid","buildingid","value"<3)
:
Ahora puede calcular el porcentaje de cada edificio, donde la pendiente es inferior a 3 grados y utilizarlo como indicador.
Alternativa:
Agregue un nuevo campo a su capa de intersección, que contenga un indicador si el valor es menor que 3 o no if("value"<3,1,0)
:
Ahora disuelva la capa por este nuevo campo, así como por el ID del edificio:
Ahora ejecute "Multipart to singlepart" para obtener áreas individuales. Puedes borrar el campo "valor" ahora, para no confundirte, ya no es válido.
Ahora puede calcular las áreas, el porcentaje de área, contar el número de áreas "aisladas" para cada edificio, hacer un análisis de vecinos o lo que mejor se adapte a su caso de uso.
O cree un índice, teniendo en cuenta algunas cosas, como por ejemplo:
(
-- percentage of areas smaller 3 per building
sum($area,"buildingid","smaller3"=1) * 100 / sum($area,"buildingid")
*
-- number of areas smaller 3
count("buildingid","buildingid","smaller3"=1)
)
-
(
-- percentage of areas greater 3 per building
sum($area,"buildingid","smaller3"=0) * 100 / sum($area,"buildingid")
*
-- number of areas greater 3
count("buildingid","buildingid","smaller3"=0)
)
Lo que, por ejemplo, haría retroceder algo como esto: tenga en cuenta que este índice es solo una idea, ¡depende de usted cómo le gustaría determinar qué áreas son buenas para usted y cuáles no!