式の変数としてQGISマップキャンバスにアクセスする


8

QGIS Map Canvasに、フィールド計算機またはラベリングエンジンで使用される変数または式の値としてアクセスできますか?

(つまり、印刷コンポーザーが「マップコンテンツによって凡例をフィルターにかける」のと同様の方法で、キャンバスの特定のビューに表示/存在する機能を選択/照会する式を作成できます)

(QGIS 2.18.1 [osgeo4w]、win7)

編集:
潜在的な(架空の)ユースケース1-レイヤーに50のポリゴンがあります。現在、マップキャンバスの現在のビューには20のポリゴンが表示されています。<= 25のポリゴンが表示されている場合は、ポリゴンの青色のスタイルを設定します。 25個以上のポリゴンが表示されている場合は、緑色にスタイルします。

潜在的な(架空の)使用例2-レイヤーに50個のポリゴンがあり、現在10個のポリゴンが表示されており、5個が[Building Type]フィールド/列に「House」の属性値があり、5個の値が「ビルディングタイプ」フィールド/列の「ガレージ」。マップキャンバスの現在のビューに表示されます。戻り値:ガレージであるポリゴンの数と等しい値...回答= 5。


3
いくつかの変数(map_extent_center / height / width、map_id、map_scale、map_rotation)があります。それ以外の場合、マスターには、is_selected 機能が選択されているかどうかを知る関数があります。あなたが何をしたいかについての詳細を持っている価値があるかもしれません。
Denis Rouzaud

@Denis Rouzaudに感謝します。私はさまざまなコンテキストでこれらの変数のいくつかを利用しました。この質問は、私がここで尋ねた別の質問の中に問題(またはその一部)を解決するために簡略化しようと頼まれた:gis.stackexchange.com/questions/218508/...
guestagain

@DenisRouzaud回答として投稿しますか?それ以外の場合は、gis.stackexchange.com
アンダーダーク

閉じましょう。質問は少しあいまいです。
Denis Rouzaud 2017年

1
私は質問が曖昧だとは思わないし、単に他のリンクされているがより詳細な質問の複製でもないと思います。実際、最初のコメントにリストされている式の変数では解決できないソリューションを具体的に求めており、クエリの解決は、リンクされた質問のユースケースに限定されません。...そして、そのような機能または現在可能な回避策のために独自のアプリケーションを持っている必要がある質問への回答に興味がある他のいくつかのようです。
再びゲスト

回答:


1

現在利用可能な変数を超えるツールの1つは、Pythonカスタム式です。

私の知る限り、これは、情報を記述して式で使用する方法でマップキャンバスにアクセスするための現在利用可能な唯一のツールです。

架空のユースケース1を解決するには、次のようにします。

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

@qgsfunction(args='auto', group='Custom')
def visibleFeaturesCount(layerName, feature, parent):
    lyr = QgsMapLayerRegistry.instance().mapLayersByName(layerName)[0]
    extentRect = iface.mapCanvas().extent()
    request = QgsFeatureRequest().setFilterRect(extentRect)
    feats = lyr.getFeatures(request)
    count = 0
    for feat in feats:
        count += 1
    return count

次に、次のようなフィルターを使用してルールベースのスタイルを設定できます。

visibleFeaturesCount('mylayer') > 20

完全なキャンバスAPIはここにあります


@Jesse McMillanに感謝します。別のプロジェクトからブレーキを取得したらすぐに、より詳細にテストする非常に役立つ回答のようです。リンクされたチュートリアルに従って上記を「式で選択」ダイアログに貼り付けたクイックテストは、チュートリアルに説明されている方法でスクリプトを保存および実行するためのオプション/ボタンがなく、チュートリアルに表示されているように機能しませんでした。スクリーンショット。pythonスクリプト(またはそれらが適切に呼び出されるもの)を使用するのは初めてですが、頭を使い始めるのを待ちきれません。上記のコードを使用して変数を定義/設定するとしたら、どこに期待しますか?
再びゲスト

少し混乱しますが、カスタム式タブの「ロード」ボタンを選択するだけです。ロードされると、追加のコマンドが使用可能なqgis式に表示されます。
ジェシーマクミラン2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.