QGISを使用してマップ範囲から生成されたラインを表示しますか?


12

次の式を使用して、QGISジオメトリジェネレーターを使用してODフローマップを描画しました。

make_line( centroid( $geometry ),
centroid( geometry( get_feature( 'Layer2', 'Attribute1', attribute(
           $currentfeature, 'Attribute2') ) ) ) )

属性に応じて線の幅を定義して、すべてがうまくいきました。

しかし、「ハブ」にズームすると、マップキャンバスの外側の場所にリンクされた線が表示されません。フィーチャがマップに表示されるはずがないためだと思います。

[ジオメトリジェネレータ]レベルと[ライン]レベルの両方で、詳細メニューの[キャンバス範囲にクリップ機能]オプションをオフにしようとしましたが、まだ表示されません。

ハブをズームしたとき

ズーム解除されたとき

ハブでズームした場合でも、すべてのラインが表示されるようにします。


これは役に立ちません...しかし、Underdarkのフローマッピングアプローチでも同じ問題が発生します。密なジオメトリのレンダリング方法に関するものである必要があります...唯一の提案は、ローカルレベルマップの属性幅で遊ぶことです...幅を小さくしますか?
アンドリュータイス

データをアップロード(shp ...)して、手順を複製して回答を取得できるようにすることもできます。
セザールアルケロ

1
シェイプ
ファイル

線の両端がマップ範囲に近い場合にのみラインが表示される場合、ラインをセグメント化することは、マップ上に表示するためのハックかもしれません。Grass-tool 'v.split.length'がおそらく仕事をします。
ジュリアン

1
これは私が持っていたのと同じ問題ですか(それがこの問題を理解する簡単な方法を提供する場合-もしそうでなければ、私を無視してください):生成されたポイントのセット全体が東に300km、600kmシフトしたポイントデータセットを表示したかった実際のポイントと比較して北。これは機能しますが、元のポイントがマップキャンバス内に収まるようにズームアウトされた場合のみです。生成されたポイントのセットにズームすると(実際のポイント位置をキャンバスの外側に移動すると)、生成されたポイントは消えます。(QGIS 2.14)
ロストラニミン

回答:


2

ここでの問題は、「ここに行があります」という実際のデータがないことです。エクスプレッションはレイヤースタイリングの一部であり、2つの適用可能なポイントもレンダリングされるときにレンダリングプロセスでのみ発生します。

[ ベクトル解析ツール]の処理ツールボックスにある[最寄りのハブまで距離]ツールを使用してみてください。スポークに特定のポリゴンを選択し、他の属性に従ってラインをスタイリングしていることに注意してください。これは可能ですが、その準備のためにいくつかのことを行う必要があります。ありがたいことに、ポリゴン入力が選択されると、ツールは自動的に重心を使用します。

  1. ベクター選択ツール > 属性による抽出
    • 入力レイヤー:「LAYER_1」
    • 選択属性:「ATTRIBUTE_1」
    • 演算子:=
    • 値:「ハブポリゴンを参照する値」
    • 抽出(属性): 'HUB'

  2. ベクター選択ツール > 属性による抽出
    • 入力レイヤー:「LAYER_1」
    • 選択属性:「ATTRIBUTE_2」
    • オペレーター:必要に応じて選択
    • 値:「スポークポリゴンを参照する値」
    • 抽出(属性): 'SPOKES'

  3. ベクトル解析ツール > 最寄りのハブまでの距離
    • ソースポイントレイヤー:「SPOKES」
    • 宛先ハブレイヤー:「HUB」
    • ハブレイヤー名属性:入力レイヤーで複数のハブが指定されている場合、選択された属性に基づいて出力に「ハブ名」フィールドを作成します
    • 出力形状タイプ:ハブへのライン
    • 測定単位:メートル
    • ハブ距離:「OUTPUT_LAYER_NAME」

結果の出力には、「SPOKES」レイヤー入力のすべての属性が保持されるため、ラインスタイリングに必要な属性が引き続き存在します。独自のベクターレイヤーであるため、いずれかのエンドポイントの可視性に関係なく、ラインはすべてのズームレベルで可視のままです。

Graphical Modelerに慣れている場合は、これらの手順を1つのプロセスに組み込み、不要なレイヤーでワークスペースが乱雑にならないようにすることもできます。


3

次の回避策が見つかりました:ジオメトリジェネレーターの代わりに追加の仮想レイヤーを使用して、ラインを表示します。

仮想層の定義:

select m.FID, make_line(.....) as geometry from my_layer m

(元のジオメトリはを使用して参照できますm.geometry

my_layerの編集時に仮想レイヤーが確実に更新されるようにするには、レイヤープロパティ| 依存関係を確認し、my_layerがチェックされていることを確認します(デフォルトではグレー表示されています)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.