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

QGISのPythonバインディング。

2
QGIS 2.18.1でPythonを介してベクターレイヤーをマージする
現在、次のコードを使用して2つのベクターレイヤーをマージしています: def append_layers(layer1, layer2, output): from processing.core.Processing import Processing Processing.initialize() import processing.tools processing.tools.general.runalg("qgis:mergevectorlayers", layer1, layer2, output) append_layers(layer1.shp, layer2.shp, output.shp) これはQGIS 2.14では問題なく動作するようですが、2.18.1では次のメッセージで失敗します。 Error: Wrong number of parameters ALGORITHM: Merge vector layers 2.14と2.18の間で変更されたものはありますか?それとも私は本当に明白なものを見逃しているだけですか?

2
各区切り文字の前の文字列フィールドから新しいフィールドへのテキストの分割
ドットで区切られたテキストを含む文字列フィールドからテキストデータを抽出し、フィールド計算機を使用して新しいフィールドに配置しようとしています。 私はこのpython関数を使用しています(QGISで/の前にテキストを抽出する方法から取得?): from qgis.core import * from qgis.gui import * @qgsfunction(args='auto', group='Custom') def func(value1, feature, parent): return value1.split('.')[0] これは、最初のドットの前のすべてのテキストを返します。ここで、区切られた各テキスト行を個別のフィールドに配置するための関数を作成する方法を考えています。 前: 後:


1
QGIS APIで空間インデックスを保存しますか?
Qgis APIを使用して、いくつかのシェープファイルの空間インデックスを作成しようとしています。Nathan Woodrowのブログ(https://nathanw.net/2013/01/04/using-a-qgis-spatial-index-to-speed-up-your-code/)で説明されている手順を実行しました。: layer = QgsVectorLayer(path, name, 'ogr') idx = QgsSpatialIndex() all_features = layer.getFeatures() map(idx.insertFeature, all_features) 私の問題は、結果のファイルがないことです(.qix?.sbn?.sbx?) この空間インデックスを保存して、シェープファイルの将来のユーザーがそれを利用できるようにするにはどうすればよいですか?

3
Shapefileデータソースのエンコードを変更しますか?
プロパティを介してシェープファイルデータソースエンコーディングのみを変更しようとしました。また、シェープファイルをLATIN1からUTF-8にエンコードする方法も変更しましたか?しかし、それはそれを変更しません。 QGISプロジェクトを保存しないと、シェープファイルデータソースのエンコードを直接変更できませんか? 私もこのコードを試しましたが、変更エンコーディングを示していますが、シェープファイルをもう一度開くと、同じ古いシステムエンコーディングが示されています。 for layer in QgsMapLayerRegistry.instance().mapLayers().values(): layer.setProviderEncoding(u'UTF-8') layer.dataProvider().setEncoding(u'UTF-8') print layer.name(), layer.dataProvider().encoding() (QGISプロジェクトを保存せず、シェイプファイルに直接アクセスして保存します。プロジェクトを保存してこのタスクを実行すると、正しく機能します)
9 qgis  pyqgis  encoding 

1
スタンドアロンのPyQGISスクリプトでプロジェクトレイヤーを一覧表示するにはどうすればよいですか?
既存の.qgsプロジェクトをロードして、内部のレイヤーのリストを取得しようとしています。プロジェクトを開くことができるようですが、レイヤーのリストを取得できません。基本的なPyQGIS構文について少し混乱していますが、クックブックではこの特定の例については説明していません。 from qgis.core import * from PyQt4.QtCore import QFileInfo QgsApplication.setPrefixPath(r"C:\OSGeo4W\apps\qgis-ltr", True) qgs = QgsApplication([], False) qgs.initQgis() # Get the project instance project = QgsProject.instance() # Open the project project.read(QFileInfo( r'C:\path\to\project\project.qgs')) print project.fileName() # Get the layers in the project layers = QgsMapLayerRegistry.instance().mapLayers() print layers qgs.exitQgis() 現在、layersプロジェクトが存在し、その中に多くのレイヤーがあるにもかかわらず、これは空の辞書を返します。
9 pyqgis 

2
QGISでラインをポリゴンに変換すると、スリバーポリゴンが生成されます
を使用してPyQGISでポリラインレイヤーをポリゴン化しようとしている間 processing.runandload("qgis:linestopolygons",explode_path,polygon_path) Pythonコンソールのコマンドでは、ラインエッジに対応するポリゴンは作成されません。代わりに、カーブしたエッジに沿って小さなポリゴンを作成します。ポリゴンがラインエッジに沿って作成されないのはなぜですか? ポリゴン化では、黒い線は作成されたポリゴンのエッジであると想定されます。代わりに、カーブしたエッジ(青いポリゴン)に沿って作成されるスライバーはほとんどありません。

2
QGISモデラーを使用して処理結果をファイルに保存しますか?
モデルから、処理結果をファイルに保存したい。私のモデルには、Extract by location妥当な結果を生成するいくつかのアルゴリズム(2つのベクトル入力を使用)がありますが、一時的なレイヤーとしてのみSave as...であり、手動で行う必要があるため、山積みの解析では面倒で時間がかかります。 最善の方法は、モデルへのパスを渡し、結果をシェープファイルとして(最初のステップで)保存することです。 こちらがモデルです。出力ベクター(ファイル)は処理結果に接続できないことに注意してください。 スクリーンショットa)でわかるように、Save selected featuresアルゴリズムb)でも、最終結果の名前を渡すことはできますが、ファイルを渡すことはできません。 a) b) 私はこれをpythonスクリプトで実現する方法を漠然と考えていますが、これは既存のツールの組み合わせで行うことができますか?

1
pyqgisにカスタムqgsfunctionを登録する
スタンドアロンアプリケーション内でpyqgisを使用しています。次に、のルールでfilterExpressionとして使用するカスタム式を作成したいと思いましたruleBasedRendererV2。(以前に既存の関数でレンダラーを試しましたが、すべてうまくいきました!) カスタムqgisfunction(ビットごとのAND関数-そのような関数はまだないため)は次のようになります。 from qgis.utils import qgsfunction @qgsfunction(args="auto", group='Python') def bitwise_and(value1, value2, feature, parent): return value1 & value2 私もそれを登録しようとしました: from qgis.core import QgsExpression QgsExpression.registerFunction(bitwise_and) 式をテストする: expressionString = 'bitwise_and(2, 2) = 2' exp = QgsExpression(expressionString) if exp.hasParserError(): print(exp.parserErrorString()) (与える2=2ので、いつもはTrue)関数を登録した後動作し、ない場合は失敗します。それでも、ルール内で式を使用することはできません... 現時点では、関数を含むファイルは、自動的にPATHに含まれているプロジェクトフォルダーの一番上にありますね。(Nathan Woodrowによると、ファイルはPATHのどこにでも配置できます-https : //nathanw.net/2012/11/10/user-defined-expression-functions-for-qgis/を参照してください)。 UPDATE:上記のコードで、これまでの作品の関数の登録-機能自体に今問題の嘘... アップデート#2: 非常に奇妙な!do_nothing2つの引数を取得する単純な関数は、私のコードでは正常に機能します。 @qgsfunction(args="auto", group='Python') def do_nothing(value1, value2, feature, …

3
QGISを使用して、90%を超える別のベクターポリゴンレイヤーと重複しているポリゴンをプログラムで検索していますか
私はpythonを使用して、別のベクトルと> 90%重複している1つのベクトル内のポリゴンを抽出する方法を理解しようとしています。次に、これらのポリゴンのみを表示するベクター/マップが必要です。サンプル画像は私のレイヤーを示しています。90%を超える赤のすべての灰色のポリゴンが必要です。 私はこれをすべてpython(または同様に自動化された方法)で行う必要があります。同じ方法で処理するマップが1000個以下あります。
9 qgis  python  pyqgis 

2
runalgでメモリレイヤーを入力または出力として使用していますか?
メモリ層をrunalgの入力および/または出力として使用できますか? runandload私は仕事にこれを取得します: processing.runandload("qgis:mergevectorlayers","memory:bufferOne", "memory:bufferTwo", r"memory:merged") processing.runandload("qgis:dissolve", r"memory:merged", True, '', r"D:\PythonTesting\dissolved.shp") パラメータ2と3はすでにメモリ内にある入力レイヤであり、パラメータ3はメモリに書き込まれ、次のツール(Dissolve)で使用される出力レイヤです。これは正常に機能しますが、runalgで同じロジックを使用しようとすると、メモリにマージされたレイヤーが作成されないように見えます。これは、Dissolveツールが実行されないためです。たとえば、以下は機能しません。 processing.runalg("qgis:mergevectorlayers","memory:bufferOne", "memory:bufferTwo", r"memory:merged") processing.runandload("qgis:dissolve", r"memory:merged", True, '', r"D:\PythonTesting\datenschrott\dissolved.shp") runalgがメモリ内のレイヤーを受け入れない、または何も出力できないと想定できますか?

1
QGISプロジェクトコンポーザーの印刷を自動化しますか?
約10倍のQGISプロジェクトファイルで構成される大きなプロジェクトがあります。各プロジェクトには、最大10個のマップを生成するように設定されたアトラスを備えた印刷コンポーザーが含まれています。 各プロジェクトのオープンを自動化し、composerアトラスを使用してPDFを作成する最も簡単な方法は何ですか? (このようなものが理想的です-可能かどうかはわかりません) C:\ OSGeo4W \ bin \ qgis.bat --project MyProject1.qgs --code SaveAtlasAsPdf.py C:\ OSGeo4W \ bin \ qgis.bat --project MyProject2.qgs --code SaveAtlasAsPdf.py

1
QGIS PythonプラグインからPostGISレイヤーを追加する
Pythonの学習の一環として、プラグインからpostgisレイヤーをqgisに追加するプラグインを開発しようとしています。 postgisレイヤーを追加するためのコードはクックブックから取得され、qgis内のpythonコンソールから実行すると正常に動作します(ダイアログボックスで[OK]ボタンが押された場合、結果== 1であり、レイヤーをqgisに追加する必要があります)。 しかし、プラグインから実行すると、メッセージNameError:name 'QgsDataSourceURI' is not definedがスローされます。プラグインから実行するとエラーが発生するのはなぜですか? プラグインから/関数内からレイヤーを追加する方法とPythonコンソールから追加する方法に違いはありますか? def run(self): """Run method that performs all the real work""" # show the dialog self.dlg.show() # Run the dialog event loop result = self.dlg.exec_() # See if OK was pressed if result == 1: # Do something useful here - delete …


3
PyQGISのループで空間クエリを実行する
私がやろうとしていること:ポイントシェープファイルをループして、ポリゴンに該当する各ポイントを選択します。 次のコードは、本で見つけた空間クエリの例に基づいています。 mitte_path = r"D:\PythonTesting\SelectByLocation\mitte.shp" punkte_path = r"D:\PythonTesting\SelectByLocation\punkte.shp" polygon = QgsVectorLayer(mitte_path, 'Mitte', 'ogr') points = QgsVectorLayer(punkte_path, 'Berlin Punkte', 'ogr') QgsMapLayerRegistry.instance().addMapLayer(polygon) QgsMapLayerRegistry.instance().addMapLayer(points) polyFeatures = polygon.getFeatures() pointsCount = 0 for poly_feat in polyFeatures: polyGeom = poly_feat.geometry() pointFeatures = points.getFeatures(QgsFeatureRequest().setFilterRect(polyGeom.boundingBox())) for point_feat in pointFeatures: points.select(point_feat.id()) pointsCount += 1 print 'Total:',pointsCount これは機能し、データセットを選択しますが、問題はバウンディングボックスによって選択されるため、明らかに興味のないポイントを返すことです。 qgis:selectbylocationを使用せずにポリゴン内のポイントのみを返すにはどうすればよいですか? 私はwithin()およびintersects()メソッドを使用しようとしましたが、それらを機能させなかったため、上記のコードに頼りました。しかし、おそらくそれらは結局のところ鍵です。

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