sakuyaさま:
こんにちは。
ご希望のラインの生成ですが、フィールド計算機を活用して、とのことですのでやってみました。
まず、フィールド計算機にはprojectという、あるポイントから距離と角度を指定して遷移する関数があります。
また、ラインの生成にはmake_lineという関数が利用できます。
このふたつを利用すれば、線を描くことができます。
ただし、IDなどのユニークな値を持つ共通したフィールドが必要になります。
以下、QGIS3.2でやってみたのでご参考いただければ。(平面直角12系でやったものです。)
QGISキャンバスに始点となるポイントレイヤ pt_2454 があるとします。(shpでもなんでも構いません。)
これをQGISレイヤメニューから[エクスポート]->[Save Features As](名前をつけて保存)から、gpkgファイルに新たなレイヤとして保存します。(レイヤ名を ln_2454_gpkg とします。)
保存の際に、「ジオメトリタイプ」を「LineString」としてください。ただし、コピー元のレイヤが同じgpkgに入っているレイヤの場合は複製に失敗します。
(shpだと、ポイントのジオメトリを持つデータをラインストリングタイプとして保存することができないのですが、gpkgであれば可能です。)
すると、コピー元のポイントレイヤと同じ属性値を持ったラインストリングのレイヤができます。
ラインストリングのはずのレイヤのジオメトリカラムにポイントのジオメトリが入っているので、QGISでは地物の描画はされませんが、属性テーブルは参照できると思います。
同じgpkgに、こんどは「ジオメトリタイプ」を「Point」としたレイヤもエクスポートします。( pt_2454_gpkg とします。)
この操作で、ふたつのレイヤにはデフォルトで「fid」というユニークかつ共通のIDフィールドが付加されていると思います。
(もともと共通のIDフィールドがある場合は、ポイントのインポート操作は不要です。)
その上で、レイヤ ln_2454_gpkg の属性テーブルからフィールド計算機を開きます。
「既存のフィールドを更新する」として、更新するカラムは<geometry>を選択します。
入力する数式は以下です。
内容としては、
・地物のfidから対応する点のジオメトリをレイヤ pt_2454_gpkg から参照し、
・これをproject関数で指定した長さ、角度で遷移した点を生成し、
・両者をmake_lineで線で結ぶ
というものです。
make_line( -- 始点と終点から線を生成する
geometry( -- 始点のジオメトリ
get_feature( -- 属性から地物を検索する
'pt_2454_gpkg' -- QGIS上のレイヤ名
, 'fid' -- 共通ID名
, attribute( $currentfeature, 'fid' )
)
)
, project( -- 終点のジオメトリ
geometry(
get_feature(
'pt_2454_gpkg'
, 'fid'
, attribute( $currentfeature, 'fid' )
)
)
, 100 -- 距離
, radians(45) -- ラジアン角
)
)
試しに作成したポイントのshpと、そこから作成したgpkgを貼付しておきます。
ご参考になればさいわいです。