7 votos

Extrusión de huellas de edificios 2d en función de las alturas mediante python

Tengo huellas de edificios 2d como geometrías polygonz y alturas de edificios como atributo. Quiero extruirlas según los valores de altura y generar superficies de edificios y registros de edificios poliédricos.

Para ello en python copio los vértices de la huella y aumento los valores z de las coordenadas según las alturas y luego añado estos nuevos vértices a mi lista de vértices. Así que finalmente logro 8 puntos que representan las esquinas del edificio en forma de bloque como se puede ver en la imagen.

Footprint extrusion

¿Cómo puedo triangular utilizando estos puntos y crear triángulos que representen superficies de edificios utilizando python?

¿Puedo utilizar una biblioteca de triángulos aunque sólo utilice puntos 2d como argumentos?

0 votos

¿Puedes explicar tu caso de uso, y dónde/cómo piensas utilizar la geometría resultante? Construir los triángulos es fácil, pero dependiendo de cómo los vayas a utilizar, el enfoque puede variar.

0 votos

Estoy intentando crear modelos de edificios en 3D a partir de huellas en 2D. Quiero crear una lista que almacene datos, caras (lista de triángulos) y lista de índices (qué vértices pertenecen a estos triángulos). Así, puedo escribir estas geometrías en archivos como CITYGML o ESRI multipatch shapefile

4voto

Lewis Jackson Puntos 116

Consulte esta respuesta ya que contiene un código de ejemplo para crear superficies CityGML.

La parte relevante para la extrusión de la huella es:

polygon = []
for point_A, point_B in zip(points_2D[:-1], points_2D[1:]):
    surface = []
    surface.append((point_A[0], point_A[1], roof_height))
    surface.append((point_B[0], point_B[1], roof_height))
    surface.append((point_B[0], point_B[1], ground_height))
    surface.append((point_A[0], point_A[1], ground_height))
    surface.append((point_A[0], point_A[1], roof_height))

    polygon.append(surface)

En este formato, se pueden definir superficies (no es necesario que sean triángulos) con una lista de tuplas que definen los puntos (las tuplas deben ser tridimensionales ya que estamos generando estructuras 3D aquí). Además, cada superficie debe empezar y terminar en el mismo punto (lo que la convierte en una superficie 3D cerrada).

Recuerde que cada punto de la superficie debe declararse en el mismo orden, en sentido contrario a las agujas del reloj visto desde el exterior (así especificamos en qué dirección apunta la "cara").

También tendrá que generar techos y otros polígonos. La pregunta enlazada muestra cómo hacerlo también.

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