QGISは属性への弧の半径を計算します


9

QGIS 2.18.16がインストールされています。私の問題は、円弧/曲線フィーチャ(ライン)の半径を計算する方法ですか?これらの行は、FMEで読み取ってPostGis DBに書き込んだ.dgnファイルに由来しています。主キーなどを作成しましたが、テーブルは完全に編集可能です。円弧の長さを計算しましたが、これらの曲線の半径を計算する方法がわかりません。これ(https://www.mathopenref.com/arcradius.html)は、QGIS計算機でそれを使用する方法を理解することはできませんが、数学の面でいくつかのアイデアを与えるかもしれません。そのため、DBにあるすべての行の「R」を計算する必要があります。

ベローは一例です。私のデータには、「通常の」ポリラインとは異なるテーブル上の円弧/曲線があります。

ここに画像の説明を入力してください


識別ツールで円弧をクリックすると、リストされている派生属性の1つが「最も近い頂点半径」です。したがって、半径を計算する必要はありません。フィールド計算機でこのプロパティにアクセスする方法を理解する必要があるだけです。または、単純にそれを識別ツールからコピーします。
csk

ノードツールで頂点を選択することにより、レイヤーが編集モードのときに頂点のプロパティを表示することもできます。次に、頂点座標(x、y、r)がVertex Editorパネルに表示されます。
csk

識別ツールで半径を確認することは少なくとも可能です。アークの数が少ない場合は、コピーと貼り付けを選択できますが、手動で実行するにはアーク機能が多すぎるため、これを使用しているデータ全体に使用する予定です。:/
Sisuaski 2018

私は少しググってみましたが、QGISで円形の文字列機能を使用する人は多くないようです。そのため、フィールド計算機に既製のツールや関数はありません。カスタムPython関数を定義する必要がある場合があります。そのルートに行きたい場合は、質問にpygisタグを追加してください。
csk 2018

フィーチャーにはいくつの頂点がありますか?Vertex Editorをクリックすると、何が表示されますNode Toolか?
マルコ

回答:


6

軽くテストされた式が続くので、注意して進めてください。しかし、ここの例に沿って:https : //www.mathopenref.com/arcradius.html ここに画像の説明を入力してください

円弧の弧に沿った中間点(図ではx1、y1と言います)に頂点がある場合、これを始点と終点と共に使用して、弦の長さ「 W」と高さを計算できます。次の式を使用して半径「R」を取得するための「 h」:

ここに画像の説明を入力してください

そして言って

ここに画像の説明を入力してください

W =

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

そして

ここに画像の説明を入力してください

H =

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

フィールド計算機の式ダイアログには、半径計算のための次の長い方程式があります。

ここに画像の説明を入力してください

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

1
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}$$ および $$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

とても良い!頂点にアクセスする方法を想像していませんでした。PostGISで可能ですか?
マルコ

1
マルコ、あなたが探しているどんな頂点も抽出することが可能だと私は信じています。こちらのリンクをご覧ください:postgis.net/docs/ST_PointN.html。最も優れた数式の追加と編集をありがとうございます。
cm1

開発者が「半径を簡単に計算する」ためのボタンを追加するのを待っている間、これは私が期待できる最も役立つ回答です。現在、私(そしておそらく他の人も)は少なくとも半径を抽出する方法を持っています。:)私はまだこれをテストしていませんが、十分な時間があるときに数日でテストします。どうもありがとうございました!
Sisuaski 2018

1

FMEでデータを抽出しながら半径を抽出するのはどうですか?そこにArcPropertyExtractorトランスフォーマーがあり、PostGIS DBで設定する準備ができている属性の半径値を提供します。


これは、データ全体を処理するための優れた方法です。私の問題は、私の組織に十分なFMEユーザーがいないため、プロセスをできるだけ簡単にする必要があることです。つまり、弧、領域、線などを含むプロセス全体をQgisで実行できるはずです。Arcフィーチャの半径を新しいオブジェクトに更新する機能は、Qgisで実行する必要があります。返信ありがとうございます。今のところ、FMEで半径属性を更新しますが、QGISでそれを行う方法があることを願っています。
Sisuaski 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.