Tengo una forma que podría funcionar sólo usando operaciones y expresiones vectoriales QGIS. Encuentra el ángulo del segmento más largo de las características del polígono.
En resumen:
- Convierte los rasgos de los polígonos N en rasgos lineales N
- Explotar las características lineales N a los segmentos de línea simple M
- Los segmentos de línea simple M tienen una variable de identificación de los polígonos. Seleccione los segmentos de línea cuya longitud no sea igual a la longitud máxima agrupada por ese ID y elimine. Eso deja sólo el segmento de línea simple más largo de cada polígono.
- Añade un
angle
atribuir a los restantes segmentos de línea simple utilizando el atan2
función.
- Une la capa del polígono con la capa del segmento de línea en el atributo ID.
Ahora tu polígono tiene un atributo de "ángulo" unido que es el ángulo del lado más largo (en radianes).
Ese es el algoritmo. La implementación sigue:
Necesitarás "Polígonos a líneas" de la caja de herramientas de QGIS y luego "Explotar líneas" de la caja de herramientas para los dos primeros pasos.
Para obtener los segmentos de línea simple más largos agrupados por la variable "id", haga "Seleccionar por expresión" y use: $length != maximum($length, "id")
- tu id
La variable puede tener otro nombre, tiene que ser única por polígono. Aplica eso y deberías tener la mayoría de los segmentos de línea simples seleccionados. Activa la edición de esa capa y corta esas características.
Crear la columna de ángulo añadiendo un nuevo atributo llamado "ángulo", y actualizándolo con la siguiente fórmula:
atan2(y_max($geometry) - y_min($geometry),x_max($geometry)-x_min($geometry))
Entonces apaga la edición de esa capa explotada y guárdala.
Finalmente, usa las propiedades de la capa del polígono para crear una unión de los polígonos a los segmentos de la línea, emparejando en el id
atributo.
Mira ahora la tabla de atributos de tus polígonos, y debería tener el ángulo del segmento de línea más largo de la capa del segmento de línea unido.
Ten en cuenta que esto no es dinámico, así que si cambias los polígonos no se actualizará correctamente, tendrás que empezar de nuevo. Sospecho que este flujo de trabajo podría estar envuelto en un diagrama de flujo....
1 votos
¿Tienes experiencia programando en Python con la API de QGIS? Esa podría ser la forma de hacerlo. Hacer un bucle sobre la geometría de cada característica, encontrar la línea más larga, obtener su dirección - todo ello se puede hacer desde Python.
0 votos
@spacedman ... No, no tengo experiencia en la programación de Python. ¿La tienes?
0 votos
¿Quieres el lado más largo del rectángulo? Un punto central puede ser equidistante a 2+ bordes (piensa en un cuadrado). Puedo hacer sugerencias pero depende del objetivo. ¿Puede aclarar el objetivo final?
0 votos
¿En qué se diferencia esto de gis.stackexchange.com/questions/233771/