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

QGISのPythonバインディング。


2
virtualenv PythonでQGISを起動しますか?
デフォルトのシステム全体のインストールとは異なるPythonインストールを使用するようにQGISに指示する方法はありますか?例えば、/myvirtualenv/bin/python代わりにいくつかのvirtualenv Pythonを使用しますか/usr/bin/python? 背景:特定のvirtualenvにのみインストールされ、システム全体にはインストールされないモジュールを使用するカスタムプラグインを開発しています。 virtualenvはシステム全体のパッケージへのアクセスを許可されているため、そのvirtualenvを使用する場合でもqgisコアライブラリにアクセスできます。 現在私が目にしている唯一の解決策は、必要なモジュールをシステム全体のPythonにインストールすることです。ただし、可能であれば、virtualenvにのみ保持したいと思います。

1
QGISプロジェクトで動的なレイヤー名を持つことは可能ですか?
現在の日付を使用するPostGIS SQLクエリに基づく、レイヤーのあるQGISプロジェクトがあります。データベース内のデータが変更されるため、これらのクエリは毎日異なるデータを返します。 レイヤーツリーパネルでレイヤーの名前を動的に変更して、現在の日付を表すことはできますか?(つまりTraffic on 24.01.2015、毎日変更されるのようなレイヤー名)。キャプションのデータは、レイヤー内のフィーチャの属性から取得する必要がありますtraffic_date。フィールドの値はすべて同じです。

4
QgsSpatialIndexによって返される機能に効率的にアクセスするにはどうすればよいですか?
PyQGISクックブックは、空間インデックスを設定する方法について説明しますが、それは唯一のその用法の半分を説明します。 空間インデックスの作成—次のコードは空のインデックスを作成します index = QgsSpatialIndex() インデックスに機能を追加—インデックスはQgsFeatureオブジェクトを受け取り、それを内部データ構造に追加します。オブジェクトを手動で作成するか、プロバイダーのnextFeature()への以前の呼び出しからのオブジェクトを使用できます index.insertFeature(feat) 空間インデックスにいくつかの値が入力されると、いくつかのクエリを実行できます # returns array of feature IDs of five nearest features nearest = index.nearestNeighbor(QgsPoint(25.4, 12.7), 5) 返された機能IDに属する実際の機能を取得する最も効率的な手順は何ですか?

3
PythonとQGISを使用して、フォルダーをループしてポリゴンごとにラスターをバッチクリップするには?
私はpythonとQGIS 2.0を使用しています。1つのポリゴンフィーチャによってフォルダー内のラスターをクリップしようとしています。私が「PyQGIS」を使用するのはこれが初めてです。以前はArcpyに慣れていました。とにかく、簡単なスクリプトが機能しないので、どんな提案でもいただければ幸いです。 import qgis.core, qgis,utils QgsApplication.setPrefixPath("C:/OSGeo4W64/apps/qgis", True) QgsApplication.initQgis() CLIP= "C:/Users/unim/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/study_area_foscagno.shp" INPUT_FOLDER="C:/Users/unimi/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/LE71930282000259EDC00" OUTPUT= "C:/Users/unim/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/foscagno_pyqgis/" for RASTER in INPUT_FOLDER.tif do echo "Processing $RASTER" gdalwarp -q -cutline CLIP -crop_to_cutline -of GTiff RASTER OUTPUT+ "clip_"+ RASTER done QgsApplication.exitQgis() 以下は、今までに行った改善ですが、スクリプトを機能させていませんが、近づいていると思います... import qgis.core, qgis.utils, os, fnmatch from osgeo import gdal CLIP= "C:/Users/unimi/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/study_area_foscagno.shp" INPUT_FOLDER= "C:/Users/unimi/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/LE71930282000259EDC00/DNs2Reflectance_LE71930282000259EDC00" OUTPUT= "C:/Users/unimi/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/Cloud_mask_AltaValtellina/clip_2_foscagno" …
9 gdal  pyqgis  gdalwarp 

3
スタンドアロンスクリプトでMap Composerを使用する方法
私はpyqgisクックブックのマップレンダリングセクションをフォローしようとしていますが、これをスタンドアロンアプリケーションとしてテストしたいと思います。最初の部分は簡単なレンダリングを使用して実行できますが、スタンドアロンのスクリプトとしてマップコンポーザーを使用して2番目の例を実行するのは少し行き詰まっています。 これが私ができるビットのスタンドアロンの例です: from qgis.core import * from qgis.gui import * from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtXml import * QgsApplication.setPrefixPath("/usr/", True) QgsApplication.initQgis() fh = open("eg.csv","w") fh.write(""" x,y,name 153.0278, -27.4679, Brisbane 144.2500, -23.4500, Longreach 145.7753, -16.9256, Cairns """) fh.close() uri = "eg.csv?delimiter=%s&xField=%s&yField=%s" % (",", "x", "y") layer = …
9 qgis  python  pyqgis 

1
PythonプラグインからQGISで属性を編集する速度
QGIS Pythonプラグインを使用して、レイヤー内の各フィーチャの属性の値を編集しようとしています。編集モード以外でこれを行うと、編集中よりも速度が遅くなることを発見しました(編集のコミットも含む)。以下のコードを参照してください(ループの同じポイントで交換可能な行)。サンプルデータセットの速度の違いは、2秒(編集モード)と72秒(編集モードではない)です。 編集モードでの属性の変更: layer.changeAttributeValue(feature.id(), 17, QtCore.QVariant(value)) 編集モード以外で属性を変更する: layer.dataProvider().changeAttributeValues({ feature.id() : { 17 : QtCore.QVariant(value) } }) これは予想される動作ですか?ユーザーが変更を元に戻すことができる必要はないので、編集モードを使用する必要はないと思います。 編集1:両方のバージョンが含まれている(ただしコメント化されている)下の完全なコードを参照してください: def run(self): try: # create spatial index of buffered layer index = QgsSpatialIndex() self.layer_buffered.select() for feature in self.layer_buffered: index.insertFeature(feature) # enable editing #was_editing = self.layer_target.isEditable() #if was_editing is False: # self.layer_target.startEditing() # …
9 qgis  python  pyqgis 

6
数値フィールドから「1,000」のような形式のラベルを作成しますか?
この質問は、gis.stackexchange: 正規表現を使用して属性データを簡単に編集するにはどうすればよいですか? おそらく誰かが私を正しい方向に向けることができますか? 輪郭線のベクトルシェープファイルがあります。属性テーブルでは、標高値を含む整数データで構成されるFEETというフィールドを、Labelという文字列フィールドに既に変換しています。さらに、データにラベルが付けられたときにフィートとして読み取られるように、文字列の最後に 'を追加しました。 次に行うことは、文字列の長さが4より大きい場合にのみ、文字列の最初の2つの値の間にコンマを挿入することです。つまり、コンマが[ラベル]フィールドの数千から数百桁の間にのみ表示されるようにします。長さは4より大きい必要があります。 これまでの私のコードは: case when length( "Label") >4 then regexp_replace( "Label", '^([0-9])+([0-9]{3}\')$','$1 , $2') else "Label" end ただし、regexp_replace関数は、関数の3番目のパラメーターでグループ変数$ 1 $ 2を受け入れないようです。 私はhttp://docs.python.org/2/library/re.htmlを見てきました。フィールド計算機の正規表現は、Pythonの正規表現の使用に基づいて理解したものですが、これを理解することができなかったためです。Mac OSX上のQGIS 1.8のフィールド計算機でこの関数を使用して、私がやろうとしていることはまだできないかもしれません。あるいは、私は初心者のプログラマーであり、正規表現はやや新しいため、構文が間違っている可能性があります。

3
PythonコンソールからQGIS Zonal Statsプラグインを使用していますか?
QGISのゾーン統計プラグインを使用して、オーバーレイポリゴンからラスター統計を抽出しています(種の分布のシェープファイルがあり、各種の範囲内から環境データを抽出したい)。データを取得する必要のあるファイルが300個ほどあるので、Pythonコンソールで実行するスクリプトを記述したいのですが、Pythonの初心者であり、これを行う方法がわかりません。

1
QGISで編集中に、選択したマルチパートフィーチャをシングルパートフィーチャに変換する方法は?
QGISを使用してマルチパートフィーチャレイヤーをシングルパートフィーチャレイヤーに作成する方法については、いくつかの質問とそれぞれの回答があります。 1つのポリゴンを複数のポリゴンに分割する方法は? QGISで非隣接フィーチャを分割する方法は? しかし、私が見たすべてのソリューションは、完全に新しいレイヤーを作成し、すべてのマルチパートジオメトリを単一のものに変換します。 では、問題は、編集セッション中に、新しいレイヤーを作成する必要なしに、マルチパートフィーチャをシングルパートフィーチャに選択的に変換する方法でしょうか。 これは、「選択したフィーチャのマージ」ツールとは逆であり、ArcGISでの爆発に似ています。 これを行うプラグインはありますか?Pythonコンソールを使用してこれをどのように行うことができますか?

1
Pythonコンソールからスクリプトをインポートできないのはなぜですか?
私はqgis pythonコンソールで作業しています。通常、すべてのPythonスクリプトを〜/ Scripts / pythonに保存します。.bashrcでPYTHONPATHを〜/ Scripts / pythonに設定していますが、QGIS内のコンソールからスクリプトをインポートすることができません。 これは、Create_Figures_2Dというスクリプトをインポートしようとしたときのエラーです。 import Create_Figures_2D Traceback (most recent call last): File "<input>", line 1, in <module> File "/usr/lib/python2.7/dist-packages/qgis/utils.py", line 309, in _import mod = _builtin_import(name, globals, locals, fromlist, level) ImportError: No module named Create_Figures_2D pygisのPYTHONPATHを設定するにはどうすればよいですか?
9 pyqgis 

4
穴のある非凸多角形の最小壁厚
穴を含む複雑な非凸多角形領域の最小壁厚(値と場所)を見つける最も効率的な方法は何ですか?最小の壁の厚さが赤である、青色のポリゴンの例を参照してください。ただし、この場合、隣接する2本の線が平行である場合、位置は不明確です。 これまでのところ、私たちは試しました: ポリゴンラインを細分割し、ポリゴン内の最小ポイント-ポイントラインを検出する(強引、10'000ポイントを超える複雑なポリゴンでは効率的ではない) Delaunay三角形分割とポリゴン内部の最小エッジの検出。正確性は十分ではありません。最初にポリゴンラインのサブディビジョンと組み合わせる場合にのみ可能です。次の例(Nr 3)は、Delaunay三角形分割では、シンプレックスエッジが赤で検出されず、緑のボックスの最小の壁の厚さを見落とす場合です。 侵食バッファを繰り返し増やして最小のはめ込みを見つけます。この場合、侵食ポリゴンは複数の部分に分割されます=最小壁厚の半分。問題は、後でこのアプローチで最小肉厚の場所を見つけることです。さらに、侵食は常に複数の部分に分かれているわけではなく、「行き止まり」を見逃しています。これは、線まで侵食し、誤った最小壁厚を与える例(Nr 2)です。 最初に中心軸を見つけてから、多角形領域を覆っているが重なっていない中心軸上の最小円を検索します。編集:問題のあるのは、中心軸上の多くの「間違った候補者」です。(Nr 1)円Aは間違っています。円Bは正しい最小壁厚を示します。

2
QGIS Print Composerの凡例の凡例記号を変更することは可能ですか?
非常に複雑なデータ定義シンボルを含むレイヤーがいくつかあります。Print Composerで凡例を使用すると、これらの記号が正しく描画されません。 pyqgisで凡例シンボルを変更する方法はありますか?したがって、これらのレイヤーのデフォルトの凡例シンボルの代わりにカスタムのPNGまたはSVG画像を使用できますか? Print Composerにプッシュボタンを追加する方法と、それを関数に接続する方法を知っています。Legend-Settingsにボタンを追加して、自動生成された凡例アイコンをカスタム画像に置き換えることができるようにしたいと思います。だから私がまだ必要なのは、どのようにしてpyqgis / pyqtで凡例シンボルにアクセスできるか、そしてそれらをQLabelなどのQImageで置き換える方法の情報ですか? シンボルの変更に使用されるボタンの非常に基本的なモックアップ: 自動生成された凡例: カスタム凡例記号付きの凡例: Print Composerで凡例のアイテムにアクセスする方法はすでにわかっていますが、シンボル自体にアクセスする方法はまだわかりません。 import qgis from PyQt4.QtCore import * from PyQt4.QtGui import * activeComposer = iface.activeComposers() for item in activeComposer: if item.composerWindow().windowTitle()=='test': for i in item.items(): if isinstance(i,QgsComposerLegend): #print i #print i.model() legend = i for i in xrange(legend.modelV2().rowCount()): posteleg=legend.modelV2().index(i, 0) …


2
pyqgisを使用してメモリ内のレイヤーを複製しますか?
QGISにレイヤーがあり、それをプラグインを介して複製したいので、オリジナルを変更せずに、そのコピーを好きなように使用できます。 もちろんlayer2 = layer1、これは機能しません。これは、layer2で発生するすべてがlayer1でも発生するためです。 私がそれをすることがわかった唯一の方法はそのようなものです: QgsVectorFileWriter.writeAsVectorFormat(layer1,r"C:\Users\ABC\AppData\Local\Temp\NewLayer.shp","utf-8",None,"ESRI Shapefile") layer2 = QgsVectorLayer("C:\Users\ABC\AppData\Local\Temp\NewLayer.shp","New vector","ogr") #do something with layer2 新しいファイルを書き込むことなく、メモリ内のレイヤーを複製する簡単な方法はありますか?

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