タグ付けされた質問 「pyqgis」

QGISのPythonバインディング。

1
レイヤーの属性テーブルの色列に色のスタイルをコピーする方法は?
QGISには、各ポリゴンにランダムカラースタイルを適用したポリゴンレイヤーがあります。[レイヤプロパティ]-> [スタイル]で、カテゴリ化されたスタイルを選択し、ランダムなカラーランプを生成しました。レイヤーテーブルに色の列を追加しました。スタイルで割り当てられた色を「#ff0000」の形式で各ポリゴンの色列に自動的にコピーする方法はありますか? 最終的には、GeoJSONレイヤーとしてエクスポートし、リーフレットマップにインポートします。色の列は、リーフレットの色を設定します。
15 qgis  leaflet  pyqgis  style 

2
通信塔のセクターを作成していますか?
私はモバイルネットワーク業界で働いておりc++/python、次のことを行うQGISのプラグインを作成するタスクを引き受けました。 ステップ1:各タワーの緯度/経度に基づいて、各モバイルタワーに対応するポイントを作成します(このパートは完了しました) ステップ2:さらに:セクター化:これらのタワーのそれぞれは、異なる方位に向けられたアンテナを持っています。だから私は各アンテナ方向にシンボルを作成する必要があります(最終的には花の花びらや内側に尖った三角形のように見えます) ステップ3:セクターをクリックすると、そのセクターに面しているすべての近くのセクターが何らかの方法で強調表示されるはずです(隣人を見つけることができます) 私が始めなければならないのは、セクター名、緯度、経度、アンテナの向きなどを含む大きなExcelファイルです 誰にも意見がありますか?

1
Qgis 3.0を使用したPython処理スクリプトの作成
Qgis 3.0の更新後、Qgis 3.0での処理スクリプトの記述に関する情報を見つけることは非常に困難になりました。 @Underdark(こちらを参照)は、スケルトンの基礎を提供しています。このコードは、テンプレート(Qgis 3.0.2)から新しいスクリプトを作成するときに、Qgisにも追加されたようです。 しかし、私のようなPython初心者がそのコードを変更する方法を理解するのを助ける方法を見つけることができませんでした。特に入力層と出力層については。 私の目標は、2つのラスターレイヤーとダブルを入力として、2つのレイヤーを出力するスクリプトを作成することです。 それを可能にするためにサンプルコードに必要な変更は何ですか? Qgis 2.xの場合、次の構文を使用します。 ##Layer1=raster ##Layer2=raster ##myDouble=Double ##OutLayer1=output raster ##OutLayer2=output raster 私が理解していることから、次の手順で変更を行う必要がありますが、何を配置するのかわかりません。 def initAlgorithm(self, config=None): self.addParameter(QgsProcessingParameterFeatureSource( self.INPUT, self.tr("Input layer"), [QgsProcessing.TypeVectorAnyGeometry])) self.addParameter(QgsProcessingParameterFeatureSink( self.OUTPUT, self.tr("Output layer"), QgsProcessing.TypeVectorAnyGeometry)) 5月16日、Qgis python APIドキュメントがリリースされました。ただし、ここでの使用方法はまだ不明です。(Pythonの知識が不足している可能性があります)
14 qgis  pyqgis  qgis-3 

1
QGISデスクトップアプリに新しいメニュー項目を追加しますか?
QGIS Desktop(2.7.0)のトップレベルメニューに新しいメニュー項目を追加する必要があります。つまり、「プロジェクト」、「編集」、「表示」、「レイヤー」などと同じレベルになります。 私が知っている限り、QgisInterface(http://qgis.org/api/classQgisInterface.html)を使用してメニュー項目を非表示にする方法(設定->カスタマイズ)があり、QGISで既に定義されているメニューに新しい項目を追加できます(プラグインコードからaddLayerMenu、addPluginToDatabaseMenuなど)。 しかし、最上層に新しいメニュー項目が必要です(これは顧客の要求です)。
14 qgis  pyqgis  qt  gui  context-menu 


6
PyCharm 2019はQGISとはもう機能していません
PyCharm 2019への更新以来、QGIS Pythonモジュールをロードできません。自動補完も使用できません。私はすでにキャッシュを削除しました(PyCharmのキャッシュを無効にし、ユーザー設定ディレクトリの「システム」フォルダーを削除することによって)、何も動作しないようです。 PyCharm内でPythonコンソールを起動して「import qgis.core」と入力すると、次のエラーが表示されます。 Traceback (most recent call last): File "<input>", line 1, in <module> File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.2.2\helpers\pydev\_pydev_bundle\pydev_import_hook.py", line 21, in do_import module = self._system_import(name, *args, **kwargs) File "C:\OSGEO4~1\apps\qgis-ltr\python\qgis\core\__init__.py", line 27, in <module> from qgis._core import * File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.2.2\helpers\pydev\_pydev_bundle\pydev_import_hook.py", line 21, in …

1
PyQGISで名前でレイヤーを取得していますか?
距離があれば、都市のリストのバッファーを見つけるプラグインがあります。州と都市の名前は属性テーブルから取得され、それに応じてフィルタリングされます。私が欲しいのは、私のプラグインは、キャンバスに存在する他のレイヤーに関係なく、キャンバスのレイヤー名またはレイヤーの順序を識別し、そのレイヤーから対応する属性にアクセスする必要があるということです。 また、コード内の特定のレイヤー名を指すと、他のレイヤーがいくつか存在するにもかかわらず、反復でエラーが発生するのではないかと思っています。 以下は私のコードです。どこで変更を加える必要があり、何が変更されるのか教えてください。 if dist and centerCity: #QMessageBox.information(self.dlg, "info", "both True") st = '"name" = \'' + centerCity + '\'' exp = QgsExpression(st) else: QMessageBox.warning(self.dlg, "Enter the distance","Enter the distance and try again.") return #terminate the function layer = self.iface.activeLayer() it = layer.getFeatures(QgsFeatureRequest(exp)) feature = it.next() mbuf = feature.geometry().buffer(dist, 2) …

1
QGIS Measure Toolから距離を取得していますか?
入力マスクを使用してSpatialiteデータベースにフィードするプラグインを作成しました。オブジェクトの最小/最大次元を表す2つのフィールドがあります。 iface.actionMeasure().trigger()2つのプッシュボタン「メジャー」でメジャーツール()を呼び出した瞬間に、寸法をクリックし、キーボードでフィールドに値を入力します(QLineEdit)。 測定ツールで右クリック(測定の終了)を行った後、値が自動的にフィールド(最小または最大、QLineEdit)にコミットされる可能性はありますか? 測定ツールの呼び出し(動作します) 左クリック:測定を開始 4.一度に:右クリックして、測定ツールの合計値を最小フィールド(QLineEdit)にコミットします。 更新1: この質問をしたある日、メジャーツール(ST_Length(geom))として使用できるラインストリングレイヤーを作成するというアイデアを思いつきました。利点は、そこからデータを操作および取得することを完全に制御できることです。短所は、プロジェクトに追加の層があることです。 ワークフローは次のとおりです。 測定をクリック:編集を切り替え、「機能を追加」を有効にします オブジェクトの最小寸法を表す線ストリングを作成します 変更の確認、ラインストリングの長さの計算(ST_Length(geom))、QLineEditへの長さのコミット ダイアログを閉じてラインストリングを削除(DELETE FROM) しかし、私の実際の質問は残っています。測定ツールから直接距離値を取得する方法はありますか? アップデート2: Jakobの助けを借りて、Measure Tool を閉じるまで、Measure ToolのTotal値でQLineEditを更新できます。次に、値は「0,000 m」に設定されます。私はこれを使用してこの問題を解決しました: def text_changed(str_measure): if str_measure == '0,000 m': pass else: self.min.setText(str_measure) 動作しますが、これが適切な解決策であるかどうかはわかりません。

1
レイヤーパネルでレイヤーまたはグループを非表示にする方法
グループ内のレイヤーパネルには多数のレイヤーがありますが、それらを表示したくありません(かなりたくさんあるので、乱雑に見えます)。これらの層は、他のいくつかの層とも結合されています。 これらのレイヤーをユーザーから見えないようにすることは可能ですか(つまり、レイヤーパネルには表示されません。レイヤーの可視性を設定することではありません)または、おそらくグループを非表示にしますか? 私が見つけた最も近いものはこの投稿でしたが、より直接的なアプローチがあることを期待しています: QGIS凡例にいくつかのレイヤーのみを表示しますか?

5
道路ネットワークをQGISの六角形グリッドにスナップする方法は?
QGIS 2.14を使用して道路網を六角形のグリッドにスナップしようとしていますが、奇妙なアーティファクトが発生しています。 MMQGISで六角グリッドを作成しました。セルは約20 x 23 mです。道路ネットワークを1mバッファリングし、数メートルごとにノードがあるように高密度化しました。私が達成しようとしていることを以下で見ることができます。あなたが見ることができるように、私はいくつかのケースでそれを動作させることができます:- 青は緻密化された道路(緩衝線) 赤は「hexified」バージョンです-これは私が見つけたいものです 灰色は六角形のグリッドです 次に、新しいスナップジオメトリ機能を使用して、ノードを最も近い六角形の角にスナップしました。結果は有望ですが、ラインが六角形(またはその一部)を埋めるために広がるいくつかのエッジケースがあるようです: バッファの理由は、ジオメトリのスナップではジオメトリが異なるレイヤーにスナップできないためです。たとえば、LINEレイヤーのノードをPOINTレイヤーのポイントにスナップすることはできません)。POLYGONをPOLYGONにスナップするのが一番幸せそうです。 バッファリングされた道路線の片側がヘックスセルの片側にジャンプし、反対側がヘックスセルの反対側にジャンプすると、道路が広がると思います。私の例では、鋭角に西から東に交差する道路は最悪のようです。 私が試したもの、成功なし:- 道路ネットワークをわずかにバッファリングするため、ポリゴンのままですが、非常に薄いです。 六角セルの密度を高める(したがって、コーナーだけでなくエッジに沿ってノードがある) 最大スナップ距離の変更(これは最大の効果をもたらしますが、理想的な値を見つけることができないようです) POLYGONではなくLINEレイヤーを使用 LINEレイヤーのみを使用するように変更すると、しばらく機能し、その後クラッシュすることがわかりました。作業をそのまま保存しているようです-一部の行は部分的に処理されています。 理想的にはpostgres / postgisを使用する必要なしに、ライン上のポイントを別のライン/ポリゴンレイヤー上の最も近いポイントにスナップする他の方法を知っていますか(postgisを使用したソリューションも歓迎します)。 編集 試してみたい人のために、ここでDropboxにスターターQGISプロジェクトを配置しました。これには、Hex GridおよびDensified Linesレイヤーが含まれます。(道路ネットワークはOSMからのものであるため、QuickOSMを使用してダウンロードすることができます。たとえば、道路を高密度化するためにオリジナルを取得する必要がある場合)。 OSGB(epsg:27700)であり、単位はメートルで、英国向けにローカライズされたUTMであることに注意してください。

1
削除された機能属性にアクセスする方法(コミットする前)
レイヤー上のフィーチャ削除イベントの信号セットアップがあります: self.layer.featureDeleted.connect(self.feature_deleted) スロット上の削除された機能から属性を取得しようとすると、StopIterationエラーがスローされます(つまり、機能を取得できません)。 レイヤーへの変更がコミットされる前に、削除されたフィーチャから属性を取得できるはずだと思っていただろうか?それ以外の場合、fidパラメーターの使用方法がわかりません。 def feature_deleted(self, fid): feature = self.layer.getFeatures(QgsFeatureRequest().setFilterFid(int(fid))).next() idx = self.layer.fieldNameIndex('my_attribute') print feature.attributes()[idx] (レイヤーへの変更がコミットされる前に)削除されたフィーチャの属性にアクセスするにはどうすればよいですか?

2
QGISのPythonコンソールから補間プラグインを呼び出す
PythonコンソールからQGIS補間プラグイン関数(TINメソッド)(ラスター->補間)を呼び出したいです。 QGIS API内または処理アルゴリズムリスト内に対応する関数が見つかりません。SAGA三角形分割アルゴリズムを見つけました。これは正常に機能しますが、5〜10倍遅く、私の場合は速度が重要です。 それを実行する方法はありますか?

2
pyqgis 2.0でフィールド名を取得する方法
プラグインをQGIS 1.8から2.0に変更しようとしています。1.8バージョンでは、次のようなフィールド名のテーブルを作成します。 layer = vlayer provider = layer.dataProvider() feat = QGSFeatrue() allAttrs = provider.attributeIndexes() provider.select(allAttrs) fieldNames = [] while provider.nextFeature(feat) fields = layer.pendingFields() for (k, field) in fields.iteritems(): fieldNames.append(field.name()) 私はこれを2.0バージョンで試しました layer = vlayer fieldNames = [] for feature in layer.getFeatures(): fields = layer.pendingFields() for (k, field) in fields.iteritems(): fieldNames.append(field.name()) ただし、pendingFields()は機能しません。フィールドの名前を取得する新しいメソッドはありますか?
13 python  pyqgis  qgis-2 

2
QGIS 1.9のプログラムでメモリレイヤーにフィーチャを作成して追加するにはどうすればよいですか?
QGIS 1.8には、MSAccessデータベースからデータを読み取り、一連のメモリレイヤーに追加する作業プラグインがありました。暫定にはいくつかの処理が含まれているため、単にQGISを使用してデータベースから直接読み取ることは選択肢とは思いません。 QGIS 1.8から1.9に移行したいと思います(主に印刷コンポーザの品質が向上したため)。プラグインは新しいAPIでは機能しません。 Google検索で出てきたさまざまな方法を試しました。1つは、http: //www.qgis.org/pyqgis-cookbook/vector.html#memory-provider から以下のコードを変更します。つまり、ジオメトリと属性をデータプロバイダーに追加し、レイヤーを更新して、新しいAPIが機能するようにします少しですが、編集モードに入るまで属性は表示されませんでした(http://hub.qgis.org/issues/3713に似ています)。上記のリンクの返信#1で詳しく説明されている別のアプローチでは、レイヤーと属性を正しく追加しましたが、レイヤーに機能を追加できませんでした。 それは非常に単純なタスクであるべきであるため、ここにいる誰かがこれがどのように行われるべきかの実例を提供できることを期待しています。(PS私はプロのプログラマーではなく、私のコーディングの大部分はかなり粗雑です-どんなガイダンスも歓迎しますが、私の側で無知を許してください) # Receivers = a list of lists returned from a database query # create layer vl = QgsVectorLayer("Point", item, "memory") pr = vl.dataProvider() # add fields pr.addAttributes( [ QgsField("Rec_No", QVariant.Int), QgsField("Include", QVariant.String), QgsField("Label", QVariant.String), QgsField("X", QVariant.Double), QgsField("Y", QVariant.Double), QgsField("Z", QVariant.Double), QgsField("Height", QVariant.Double), …

1
背景ボックス付きのテキストラベルを作成する方法
QGISポイントベクターレイヤーのポイントフィーチャ用にカスタムラベルを作成しようとしています。それを行うためにPythonプラグインを作成したいと思います。ラベルの後ろに色付きの長方形を表示する必要があります(または!)。ラベルは長い文字列であり、ラベル付けエンジンの式と条件を使用して作成されます。 最も簡単な方法は、ユーザーがアクティブレイヤーのラベルを好きなように設定し、プラグインがレイヤーのフィーチャからラベルテキストを取得し、テキスト文字列を使用してボックスを作成できるようにすることだと思いました。私の問題は、QGIS APIでこれらのテキスト文字列にアクセスする方法が見つからないことです。ラベル付けエンジンによって生成されたラベル文字列はQGISにどのように保存され、どのようにして取得できますか?
13 qgis  pyqgis  labeling 

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