QGIS berechnet den Radius eines Bogens zu Attributen

9

Ich habe QGIS 2.18.16 installiert. Mein Problem ist, wie man den Radius eines Bogen- / Kurvenmerkmals (Linie) berechnet. Die Zeilen stammen aus der .dgn-Datei, die ich mit FME gelesen und in PostGis DB geschrieben habe. Ich habe Primärschlüssel usw. erstellt und die Tabelle kann vollständig bearbeitet werden. Ich habe die Längen für die Bögen erfolgreich berechnet, kann aber nicht herausfinden, wie der Radius für diese Kurven berechnet wird. Dies ( https://www.mathopenref.com/arcradius.html ) könnte auf der mathematischen Seite eine Vorstellung geben, obwohl ich nicht herausfinden kann, wie man es im QGIS-Rechner verwendet. Also muss ich das "R" für alle Zeilen berechnen, die ich in der DB habe.

Balg ist ein Beispiel. Meine Daten haben Bögen / Kurven in einer anderen Tabelle als "normale" Polylinien.

Geben Sie hier die Bildbeschreibung ein

Sisuaski
quelle
Wenn ich mit dem Identifizierungswerkzeug auf einen Bogen klicke, ist eines der aufgelisteten abgeleiteten Attribute der "nächstgelegene Scheitelpunktradius". Sie müssen den Radius also nicht berechnen, sondern müssen nur im Feldrechner herausfinden, wie Sie auf diese Eigenschaft zugreifen können. Oder kopieren Sie es einfach aus dem Identifizierungswerkzeug.
csk
Sie können die Eigenschaften eines Scheitelpunkts auch anzeigen, wenn sich eine Ebene im Bearbeitungsmodus befindet, indem Sie mit dem Knotenwerkzeug Scheitelpunkte auswählen. Anschließend werden die Scheitelpunktkoordinaten (x, y, r) im Scheitelpunkteditor angezeigt.
csk
Gut zu wissen, dass es zumindest möglich ist, den Radius mit dem Identifikationswerkzeug zu sehen. Mit nur wenigen Bögen wäre das Kopieren und Einfügen eine Option, aber ich plane, dies für alle Daten zu verwenden, die zu viele Bogenfunktionen haben, um manuell ausgeführt zu werden. : /
Sisuaski
Ich habe ein bisschen gegoogelt, und es scheint, dass nicht viele Leute in QGIS Funktionen für kreisförmige Zeichenfolgen verwenden. Daher gibt es im Feldrechner kein fertiges Werkzeug oder keine vorgefertigte Funktion. Möglicherweise müssen Sie eine benutzerdefinierte Python-Funktion definieren. Wenn Sie diesen Weg gehen möchten, fügen Sie Ihrer Frage das Pygis-Tag hinzu.
csk
Wie viele Scheitelpunkte haben Sie für das Feature? Was sehen Sie in der, Vertex Editorwenn Sie auf klicken Node Tool?
Marco

Antworten:

6

Es folgen leicht getestete Formeln. Gehen Sie daher vorsichtig vor. Aber folgen Sie hier einem Beispiel: https://www.mathopenref.com/arcradius.html Geben Sie hier die Bildbeschreibung ein

Wenn Ihre Kreisbögen am Mittelpunkt entlang des Bogens einen Scheitelpunkt haben (was in der Abbildung als x1, y1 bezeichnet wird), können Sie ihn zusammen mit den Start- und Endpunkten verwenden, um die Sehnenlänge " W " und die Höhezu berechnen" h ", um den Radius "R" mit der folgenden Formel zu erhalten:

Geben Sie hier die Bildbeschreibung ein

und sagen

Geben Sie hier die Bildbeschreibung ein

W =

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

und

Geben Sie hier die Bildbeschreibung ein

H =

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

In Ihrem Ausdrucksdialog des Feldrechners haben Sie diese lange Gleichung für die Radiusberechnung:

Geben Sie hier die Bildbeschreibung ein

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
             )
   )
cm1
quelle
1
In LaTe X $$W= \sqrt {(x_{-1} - x_0)^2 +(y_{-1}-y_0)^2}$$ $$H = \sqrt { (x_1- \frac {(x_{-1}+x_0)} 2 )^2 + (y_1- \frac {(y_{-1}+y_0)} 2 )^2}$$ und $$R = \frac {\sqrt { (x_1- \frac {(x_{-1}+x_0)} 2 )^2 + (y_1- \frac {(y_{-1}+y_0)} 2 )^2}} {2} + \frac {(x_{-1} - x_0)^2 +(y_{-1}-y_0)^2} {8 \sqrt { (x_1- \frac {(x_{-1}+x_0)} 2 )^2 + (y_1- \frac {(y_{-1}+y_0)} 2 )^2}}$$
Marco
Sehr gut! Ich habe mir nicht vorgestellt, wie ich auf die Scheitelpunkte zugreifen soll. Ist das in PostGIS möglich?
Marco
1
Marco, ich glaube, es ist möglich, jeden Eckpunkt zu extrahieren, den du suchst. Siehe den Link hier: postgis.net/docs/ST_PointN.html . Vielen Dank für die besten Ergänzungen und Änderungen an Formeln.
cm1
Während ich darauf warte, dass Entwickler eine Schaltfläche zum "einfachen Berechnen des Radius" hinzufügen, ist dies die hilfreichste Antwort, auf die ich hoffen kann. Jetzt habe ich (und möglicherweise auch andere) zumindest eine Möglichkeit, den Radius zu extrahieren. :) Ich habe dies noch nicht getestet, werde es aber in ein paar Tagen tun, wenn ich genug Zeit habe. Vielen Dank für Ihre Hilfe!
Sisuaski
1

Was ist mit dem Extrahieren des Radius beim Extrahieren der Daten mit FME? Dort haben Sie den ArcPropertyExtractor-Transformator, der Ihnen die Radiuswerte in Attributen geben soll, die in Ihrer PostGIS-Datenbank festgelegt werden können

fgiron
quelle
Das wäre ein möglicher Weg, um fortzufahren, ein guter Weg, um mit den gesamten Daten umzugehen. Mein Problem ist, dass es in meiner Organisation nicht genügend FME-Benutzer gibt und ich den Prozess so einfach wie möglich gestalten muss. Das heißt, der gesamte Prozess, einschließlich Bögen, Bereiche, Linien usw., sollte mit Qgis durchgeführt werden können. Die Fähigkeit, den Radius des Bogen-Features auf neue Objekte zu aktualisieren, ist das, was ich mit Qgis tun muss. Vielen Dank für Ihre Antwort. Ich werde die Radiusattribute vorerst mit FME aktualisieren, hoffe aber, dass es eine Möglichkeit gibt, dies mit QGIS zu tun.
Sisuaski