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

QGISのPythonバインディング。


1
スタンドアロンのPyQGIS処理スクリプトでインポートの順序が重要なのはなぜですか?
スタンドアロンのPyQGIS処理スクリプトの実行中に奇妙な問題に遭遇しました。スクリプト内のインポートの順序は、通常の実行に影響します。 Pythonコンソールを開いて次のスクリプトを入力することで問題を再現できます(GNU / Linux、QGIS 2.6.1、処理プラグインv.2.2.0-2、Python 2.7.3を使用しています)。 # Prepare the environment import sys from qgis.core import QgsApplication from PyQt4.QtGui import QApplication app = QApplication([]) QgsApplication.setPrefixPath("/usr", True) QgsApplication.initQgis() # Prepare processing framework sys.path.append('/home/YOUR_USER/.qgis2/python/plugins') from processing.core.Processing import Processing Processing.initialize() print Processing.getAlgorithm("qgis:creategrid") # Exit applications QgsApplication.exitQgis() QApplication.exit() 以下を入手する必要があります。 ALGORITHM: Create grid HSPACING <ParameterNumber> VSPACING …

2
QGIS Python API経由で名前で機能属性を設定しますか?
このコードで属性名でフィーチャ属性を設定しようとしました pr = layer.dataProvider() pr.addAttributes([QgsField("test", QVariant.Int)]) layer.updateFields() for feature in layer.getFeatures(): attrName = 'test' feature[attrName] = 1 しかし、結果としてすべてのフィールドにNULLがあります。私が使用する場合 feature.setAttributes([1]) 正常に機能します。 私が間違っていることは何ですか?feature [attrName] = 1が機能しないのはなぜですか? 更新:このソリューションを見つける pr = layer.dataProvider() pr.addAttributes([QgsField("test", QVariant.Int)]) layer.updateFields() for feature in layer.getFeatures(): attrName = 'test' feature[attrName] = 1 pr.changeAttributeValues({feature.id() : {pr.fieldNameMap()[attrName] : 1}})
13 pyqgis 

1
最小境界ボックスアルゴリズムの変更
最小バウンディングボックスに似たアルゴリズムを作成しようとしています(ただし、最終的には似たようなものにならない場合があります)。この場合、角度はパラメーターとして渡され、角度を指定すると、すべてのポイント/ポリゴンをカバーする最小の長方形が必要になります。これまでの私の考えは、ポイントの中心を見つけることです(セントロイドアルゴリズム)。そこから、パラメーターの角度と同じ角度の2本の平行線と、それらに垂直な2本の線を作成します。次に、反復を使用して、これらの線がすべてのポイントを含むまで外側(反対方向)に移動します。また、厳密な最小バウンディングボックスである必要はなく、おおよその動作です(各反復ステップのサイズに依存すると思います)。 これが私のコードです。すでにすべてのポリゴンを1つに分解しています。次に、凸包を使用して頂点を減らします。次に、すべての頂点をリストに入れます-これがまだ役立つかどうかわかりません... a = layer.getFeatures() for feat in a: geom = feat.geometry() a = geom.convexHull() vertexId = QgsVertexId() vertices = [] b = a.constGet().nextVertex(vertexId) while b[0]: vertices.append(b[1]) b = a.constGet().nextVertex(vertexId) 注:ある時点で、ボックスの角度を渡す必要があります。QGIS 3を使用していますが、これをPythonで作成する必要があります。レイヤー「レイヤー」には、他のすべてのポリゴンのディゾルブされたポリゴンという1つのジオメトリがあります。アクセスするために反復が必要ない場合があります。 詳細/情報をお伝えする必要がある場合はお知らせください。

3
バージョン2.xと3.xの両方でQGIS pythonプラグインを作成しますか?
QGIS pythonプラグインをからQGIS 2に移行し、QGIS 3さまざまなリソースを閲覧しています。 プラグインが両方のバージョンと互換性があるかどうか、またはプラグインバージョンに2つのハンドルが必要かどうかは明確ではありません。 私がこれまでに遭遇した問題は、PyQtインポート(PyQt4 / PyQt5)を管理する方法です。

1
点を囲むすべての線を取得する
私はQGISを使用していますが、ポイントと道路網があります。特定のポイントを囲む道路名を自動的に抽出する必要があります。 多くの場合、ポイントは測定された距離の問題として、周囲の道路ではなく、周囲の道路に近いため、最近隣分析およびバッファーゾーンは機能しません。周囲の道路のみを抽出する方法についてのアイデアはありますか?

1
GUIからQGIS処理スクリプトをキャンセルするクリーンな方法
最寄り施設の分析を実行するQGIS処理スクリプトを作成しました。完全な入力データセット(開始点として20kのアドレス、〜100のターゲットポイント、〜13kのラインストリングを持つOSM道路網)を取得すると、スクリプトは約3時間実行されるため、さまざまな進行状況インジケーターを使用して、まだ生きている(ログ出力、プログレスバー、残り時間、処理されたばかりの最も近い施設への道を示すラバーバンド、cp。下のスクリーンショット): 次に、実行中のスクリプトをキャンセルしたいと思います。これは[X]、処理スクリプトguiウィンドウの右上でのみ実行できます。 しかし、そうすると、スクリプトは処理時間と進行状況バーだけでなく、青い輪ゴムで示されるように処理を続けます... ...およびタスクマネージャのシステムリソース: ただし、スクリプトの数分(〜14分)後に処理が停止し、システムはリソースを消費しなくなります。 ウィンドウを閉じてから処理を停止するまでの期間はかなり予測できないように思えるので、私の質問は、これはQGIS処理スクリプトをキャンセルする推奨方法ですか、GUIからそのようなスクリプトをきれいにキャンセルする他の方法はありますか?

2
QGISフィールドにデフォルト値を設定する
レイヤーのフィールドにデフォルト値を追加したいと思います。つまり、新しい機能が作成されるたびに、そのフィールドにはデフォルト値が自動的に入力されます。 私の場合、デフォルト値は@project_filename変数(プロジェクトのファイル名)です。 この機能はどこにもありません。 よろしく、

1
PyQGISはラスタをレンダリング画像として保存し、GDALツールを使用します
QGis Save Raster as Rendered Imageのコードを使用しようとしました。iラスターレイヤー: pipelayer = i pipeextent = pipelayer.extent() pipewidth, pipeheight = (pipelayer.width(), pipelayer.height()) piperenderer = pipelayer.renderer() pipeprovider = pipelayer.dataProvider() crs = pipelayer.crs().toWkt() pipe = QgsRasterPipe() pipe.set(pipeprovider.clone()) pipe.set(piperenderer.clone()) pipedFile = os.path.join(tempfile.gettempdir(), safeLayerName + '_pipe.tif') print pipedFile file_writer = QgsRasterFileWriter(pipedFile) file_writer.writeRaster(pipe, pipewidth, pipeheight, pipeextent, pipelayer.crs()) in_raster = pipedFile …

3
QGIS処理アルゴリズムでメモリレイヤーを使用することは可能ですか?
ローカルネットワーク内のMySQLデータベースに接続するQGISプラグインを構築し、テーブルのいずれかのサブセットをインメモリレイヤーに追加しています。サブセットはデータ通貨に基づいています(測定が行われる各場所の最新の観測値のみを取得します)。このメモリレイヤーは正常に作成されました。 しかし、その後、いくつかのジオプロセシングアルゴリズムを実行したいのですが、いずれのインメモリレイヤーでも使用できません。 self.stationuri = "point?crs=epsg:4326&field=id:integer&field={}:double&index=yes".format(self.cb_field.currentText()) self.vlayer = QgsVectorLayer(self.stationuri,"scratch","memory") if not self.vlayer.isValid(): raise Exception("Failed to create in-memory layer") self.vlayer.startEditing() for i,r in enumerate(result): # Result is row-by-row result of SQL query # Add features ... self.vlayer.commitChanges() self.vlayer.updateExtents() # Add layer to map QgsMapLayerRegistry.instance().addMapLayer(self.vlayer) # Layer is successfully added to map with …

3
PyQGIS / Pythonを使用して別のレイヤーのフィーチャと交差するときにフィーチャを分割しますか?
バッファーレイヤー(緑のポリゴン)があり、バリア(青い線)を横切るたびに2つのポリゴンに分割します。私は「splitGeometry」メソッドを使用しようとしましたが、動作させることができません。これまでの私のコードはこれです: while ldbuffprovider.nextFeature(feat): while barprovider.nextFeature(feat2): if feat.geometry().intersects(feat2.geometry()): intersection = feat.geometry().intersection(feat2.geometry()) result, newGeometries, topoTestPoints=feat.geometry().splitGeometry(intersection.asPolyline(),True) result(エラー)に対して1を返し、newGeometriesに対して空のリストを返します。どんな助けも大歓迎です。

1
Pythonで新しい「タスク完了」QgsMessageBarに対処する方法
QGISの開発がここ数か月でどのような大きな一歩を踏み出したのか、本当に驚きました。新しいアイコンセット、改善された印刷コンポーザ、およびQGIS 2.0で見られる多くの変更は本当に素晴らしいです! 他の多くのクールな改良点の中には、この気の利いた青いタスクバーもありますが、これは非常に魅力的です。 スクリプトやプラグインのためにPythonでこのバーに対処することは可能ですか(たとえば、計算終了後に小さなメッセージを表示するために)?多くのQGIS開発者もこのQ&Aサイトを訪れていると思うので、ここでこの質問をしています。 PS:バーはQGIS開発でのみ表示され、一部の操作でのみ表示されます。
12 qgis  python  pyqgis 

4
QGIS 2.xのPythonコードをQGIS 3.xで動作させるには?オブジェクトに属性「legendInterface」の問題はありません
次のコードはQGIS 2.xでは正常に動作しますが、QGIS 3.xでは動作しません。 myDir = 'd:/work/output_folder/' layers = iface.legendInterface().layers() pipe = QgsRasterPipe() for layer in layers: extent = layer.extent() width, height = layer.width(), layer.height() renderer = layer.renderer() provider=layer.dataProvider() crs = layer.crs().toWkt() pipe.set(provider.clone()) pipe.set(renderer.clone()) opts = ["COMPRESS=LZW"] file_writer = QgsRasterFileWriter(myDir + layer.name() + ".tif") file_writer.setCreateOptions(opts) file_writer.writeRaster(pipe, width, height, extent, layer.crs()) これは、コードを実行したときに表示されるエラーです。 …

7
QGISプラグイン:リソース(resources_rc)ファイルのインポートの問題-プラグインがロードされない-PATHの問題?
私はqgisプラグインを構築していますが、このエラーの解決策が見つかりません。 File "/usr/lib/python2.7/dist-packages/qgis/utils.py", line 478, in _import mod = _builtin_import(name, globals, locals, fromlist, level) ImportError: No module named resources_napoved_rc 私がPythonリソースファイルを作成したことを尋ねるすべての人のために: pyrcc4 -o resources_napoved_rc.py resources_napoved.qrc 私はまだそれを機能させる方法を見つけることができません。私はいつも同じエラーを受け取ります。 私が持っているスクリプトの上に: import resources_napoved_rc.py 私はqtbuilderから直接uiファイルを使用しています。今後のアイデアはありますか?これは何らかのパスの問題か、それに類似したものでなければならないと思います。

2
キーボードを使用して、無限ループのあるPyQGISスクリプトを停止しますか?
そのため、特定の時間間隔(time.sleep(5)を使用して5秒ごと)で "while True:"を使用して何度も何度もやりたいスクリプトを作成しました。これまでのところ、しかし、私はそれを止めたいとき、私はちょうどできません。 Control + C、Control + Break、Escapeを試しましたが、キーボードはほとんど無視されます。それを止める唯一の方法は、QGISを閉じることです。何か案は?さらに、スクリプトがtime.sleep(5)に達すると、QGISの種類が5秒間遅れてフリーズし、たとえばレイヤーをパンすることはできませんが、これは正常だと思います。 これが私のスクリプトです。 from PyQt4.QtGui import * from PyQt4.QtCore import * from qgis.core import * from qgis.utils import iface import time while True: def change_color(): active_layer = iface.activeLayer() pipeline=[] txt=open('C:/users/stelios/desktop/project/Sensor.txt','r') for line in txt.readlines(): pipeline.append(line.split()) print pipeline pipeline2=[] for label,color in pipeline: if "0" …
12 pyqgis  loop 

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