9 votos

QGIS calcular radio de un arco a atributos

Tengo instalado QGIS 2.18.16. Mi problema es, ¿cómo calcular el radio de un arco / curva característica (línea)? Las líneas se originan a partir de archivos .dgn, que leí con FME y escribió en PostGis DB. He creado claves primarias, etc, y la tabla es totalmente editable. He calculado las longitudes de los arcos con éxito, pero no puedo averiguar cómo calcular el radio de estas curvas. Esto ( https://www.mathopenref.com/arcradius.html ) puede dar alguna idea sobre el lado matemático, aunque no puedo averiguar cómo usarlo en la calculadora de QGIS. Así que tengo que calcular la "R" para todas las líneas que tengo en la DB.

He aquí un ejemplo. Mis datos tienen Arcos / Curvas en una tabla diferente a las polilíneas "normales".

enter image description here

0 votos

Cuando hago clic en un arco con la herramienta Identificar, uno de los atributos derivados que aparece es el "radio del vértice más cercano". Así que no hace falta calcular el radio, sólo hay que averiguar cómo acceder a esta propiedad en la calculadora de campos. O simplemente copiarla desde la herramienta Identificar.

0 votos

También puede ver las propiedades de un vértice cuando una capa está en modo de edición seleccionando vértices con la herramienta Nodo. A continuación, las coordenadas del vértice (x,y,r) se muestran en el panel Editor de vértices.

0 votos

Es bueno saber que al menos es posible ver el radio mediante la herramienta de identificación. Con sólo unos pocos arcos de copiar y pegar sería una opción, pero tengo la intención de utilizar esto para la totalidad de los datos que tengo, que tiene demasiadas características de arco que hacer manualmente. :/

7voto

japzone Puntos 111

A continuación figuran fórmulas poco probadas, así que proceda con precaución. Pero siguiendo con un ejemplo aquí: https://www.mathopenref.com/arcradius.html enter image description here

Si sus arcos circulares tienen un vértice en el punto medio a lo largo del arco (que estoy diciendo que es x1, y1 en la figura), podrías usarlo junto con los puntos inicial y final para calcular la longitud de la cuerda " W " y la altura " h " para obtener el radio "R" mediante la siguiente fórmula:

enter image description here

y diciendo

enter image description here

W \=

sqrt(
     ( $x_at(-1) - $x_at(0) )^2 +
     ( $y_at(-1) - $y_at(0) )^2
    )

y

enter image description here

H \=

sqrt(
    ( $x_at(1) - ( $x_at(-1) + $x_at(0) )/2 )^2
    + ( $y_at(1) - ( $y_at(-1) + $y_at(0) )/2 )^2
)

en el Diálogo de Expresiones de la Calculadora de Campos tendrías esta larga ecuación para el cálculo del radio:

enter image description here

R \=

sqrt( 
    ( $x_at(1) - ($x_at(-1) + $x_at(0) )/2 )^2 
    + ( $y_at(1) - ($y_at(-1) + $y_at(0))/2 )^2
     ) /2
+
(   ( $x_at(-1) - $x_at(0) )^2 )  + 
    ( $y_at(-1) - $y_at(0) )^2 )  )
/ ( 8 * sqrt(
            ( ($x_at(1) - ($x_at(-1) + $x_at(0) )/2 )^2
            + ( $y_at(1) - ($y_at(-1) + $y_at(0) )/2 )^2
             )
   )

0voto

Joshua Chung Puntos 8

¿Qué pasa con la extracción del radio mientras se extraen los datos con FME? Ahí tienes el transformador ArcPropertyExtractor, que debería darte los valores del radio en atributos listos para fijar en tu DB PostGIS

0 votos

Esa sería una posible forma de proceder, una buena manera de manejar todos los datos. Mi problema es que no hay suficientes usuarios de FME en mi organización y necesito que el proceso sea lo más sencillo posible. Eso significa que todo el proceso, incluyendo arcos, áreas, líneas, etc., debería poder hacerse con Qgis. La capacidad de actualizar el radio de las características de los arcos a nuevos objetos es lo que necesito que se haga con Qgis. Gracias por su respuesta, sin embargo, voy a actualizar los atributos de radio con FME por ahora, pero espero que habrá una manera de hacerlo con QGIS.

0voto

danakim Puntos 148

He escrito un script de octave/matlab que calcula el radio de un polígono formado por 5 o más vértices/puntos. Sólo tienes que poner tu(s) polilínea(s) en un archivo shp y mi script añadirá el radio como un atributo en el archivo dbf. Necesitas octave para ejecutarlo.

Puede encontrarlo aquí: ¿Encontrar el radio de la curva?

0voto

f1sh Puntos 2242

Pude obtener el radio de todas las líneas de la tabla de atributos añadiendo una función personalizada.

from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom', referenced_columns=[])
def radius_function(startpoint, midpoint, endpoint, feature, parent):
    """
    Calculate the radius of an arc line, using the inbuilt circleCenterRadius
    function and evaluations of the line end points and mid point.
    <h2>Example usage:</h2>
    <ul>
      <li>radius_function( start_point($geometry), $geometry, end_point($geometry) )</li>
    </ul>

    """

    # # https://gis.stackexchange.com/questions/58079/finding-middle-point-midpoint-of-line-in-qgis

    startpoint_ = QgsPoint(startpoint.asPoint().x(), startpoint.asPoint().y()) # start of the line
    half_length = midpoint.length() # half length to the middle of the line
    midpoint_i = midpoint.interpolate(half_length /2) # calculate the middle of the line
    midpoint_ = QgsPoint(midpoint_i.asPoint().x(), midpoint_i.asPoint().y()) # Convert to Point
    endpoint_ = QgsPoint(endpoint.asPoint().x(), endpoint.asPoint().y()) # end point of the line

    # circleCenterRadius returns tuple (radius, center x coordinate, center y coordinate)
    radius_, center_x, center_y = QgsGeometryUtils.circleCenterRadius(startpoint_, midpoint_, endpoint_)     

    return float(radius_)

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