QGISのPythonエディタで以下のスクリプトを実行すると
UnicodeDecodeError: ‘cp932’ codec can’t decode byte 0x8d in position 63: illegal multibyte sequence
# -*- coding: utf-8 -*- import configparser import os # 名 print('hello')
ちなみに
# 名を# プロジェクト名
に変更するとエラーは発生しない
QGISのPythonエディタで以下のスクリプトを実行すると
UnicodeDecodeError: ‘cp932’ codec can’t decode byte 0x8d in position 63: illegal multibyte sequence
# -*- coding: utf-8 -*- import configparser import os # 名 print('hello')
ちなみに
# 名を# プロジェクト名
に変更するとエラーは発生しない
QgsProjectのclearメソッドで読み込んでいたレイヤなどが解放される
QgsProject.instance().clear()
Pythonではモジュールconfigparserを使用してiniファイルを読み込む
iniファイルの文字コードはShift-JIS((CP932)
以下のコードで基本的には読み込める
但し値に日本語があるとエラーが発生するので
import configparser config = configparser.ConfigParser() config.read(INIファイルのパス) sections = config[section] val = sections.get(key)
文字コードを指定するとエラーを回避
import configparser config = configparser.ConfigParser() config.read(INIファイルのパス, 'cp932') sections = config[section] val = sections.get(key)
最初にQgsGeometryを作成
points = [] point1=QgsPoint() point1.setX(-31446.8) point1.setY(-51366.4) points.append(point1) point2=QgsPoint() point2.setX(-31446.8) point2.setY(-50366.4) points.append(point2) point3=QgsPoint() point3.setX(-30446.8) point3.setY(-50366.4) points.append(point3) point4=QgsPoint() point4.setX(-31446.8) point4.setY(-51366.4) points.append(point4) line = QgsLineString() line.setPoints(points) poly = QgsPolygon() poly.setExteriorRing(line) geom = QgsGeometry(poly)
QgsGeometryをWKTから作成する時は
geom = QgsGeometry.fromWkt('Polygon ((-31446.7999999999992724 -51366.40000000000145519, -31446.7999999999992724 -50366.40000000000145519, -30446.7999999999992724 -50366.40000000000145519, -31446.7999999999992724 -51366.40000000000145519))')
Featureを作成
features = [] feature = QgsFeature(l.fields()) feature.setAttribute(0, 'HELLO100') feature.setAttribute(1, 2) feature.setGeometry(geom) features.append(feature) iface.activeLayer().dataProvider().addFeatures(features) iface.activeLayer().triggerRepaint()
2019/01/15 修正
iface.activeLayer().addFeatures([feature])
を
iface.activeLayer().dataProvider().addFeatures(features)
に修正
最初にカテゴリシンボルの対象となる項目「myint」を持つメモリレイヤを追加
layer=QgsVectorLayer('polygon?crs=epsg:2451','mypolygon','memory') layer.dataProvider().addAttributes([QgsField("myint", QVariant.Int)]) layer.updateFields() QgsProject.instance().addMapLayer(layer)
次にカテゴリ項目の設定
cats=[] # 項目値=1の時のシンボル val1 = 1 symbol1 = QgsFillSymbol.createSimple({'color': '0,0,255,255','outline_color': '0,0,255,255'}) label1 = 'label1' cat1 = QgsRendererCategory(val1, symbol1 , label1 ) cats.append(cat1) # 項目値=2の時のシンボル val2 = 2 symbol2 = QgsFillSymbol.createSimple({'color': '255,0,0,255','outline_color': '255,0,0,255'}) label2 = 'label2' cat2 = QgsRendererCategory(val2, symbol2 , label2 ) cats.append(cat2) renderer=QgsCategorizedSymbolRenderer('myint', cats) layer.setRenderer(renderer)
ポリゴンレイヤのシンボルの設定
ラインの色を赤に内部を透明に設定
symbol = QgsFillSymbol.createSimple({'color': '0,0,0,0','outline_color': '255,0,0,255'}) iface.activeLayer().renderer().setSymbol(symbol) iface.activeLayer().triggerRepaint()
投影情報を持たないShapeファイルを読み込むと投影情報の確認ダイアログが表示される
これはオプションで新しいレイヤの投影座標系に「CRSダイアログを表示」が指定されているため
これを「プロジェクトのCRSを使用する」に変更するためにはQSettingで設定
QSettings().setValue( "/Projections/defaultBehavior", "useProject" )
※オプション画面のuiはqgsoptionbase.ui
from qgis.core import QgsProject crs = QgsCoordinateReferenceSystem("EPSG:2541") prj = QgsProject.instance() prj.setCrs(crs)
設定した投影がステータスバーに反映される
設定した内容を確認
print("CRS Description: {}".format(crs.description())) CRS Description: JGD2000 / Japan Plane Rectangular CS IX
どこかのサイトで以下のコードでプラグインをロードできるとあった。
試してみるとプラグインの選択画面ではチェックが付くが実際にはプラグインの中の関数は呼ばれない
qgis.utils.loadPlugin('myplugin')
以下も同時にやるといいみたい。
でもチェックが付かない?
qgis.utils.startPlugin('myplugin')
QGISは実行パラメータ–codeで起動時にPythonのスクリプトを実行できる。
どこかのサイトでこのスクリプトの中で以下のようにQgsSettingsを設定すれば起動時にプラグインをロードできると記載があったが
QSettings().setValue( "/PythonPlugins/myplugin", True )
これはダメ!
起動時に指定したスクリプトはプラグインのロード終了後実行されるので、影響がない