8 votos

¿Determinar la dirección de los polígonos usando QGIS?

enter image description here Is it possible to get the direction of the longest side of a rectangle, in Qgis?

¿Es posible obtener la dirección del lado más largo de un rectángulo en QGIS?

Sé cómo obtener la dirección de una capa de línea. Pero necesito saber la dirección de un polígono. Se podría empezar en el centro de un polígono y encontrar el camino más corto al borde usando una línea y tomar la dirección de esta línea, pero no sé cómo dibujar esta línea automáticamente para 30000 polígonos.

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?

5voto

John Feminella Puntos 123

Si ejecutas el algoritmo de "Cuadro delimitador mínimo orientado" sobre tu capa, obtendrás un nuevo campo de ángulo en tu capa que indica el ángulo de este cuadro delimitador mínimo. Sospecho que eso es lo que necesitas.

4voto

Richard Hansen Puntos 955

En QGIS 3.16+ hay una nueva función: main_angle() que facilita las cosas.

3voto

Jay Bazuzi Puntos 194

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....

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