Python iniファイル読み込み

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)

Polygon Featureを登録

参考サイト

最初に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)

レイヤのCRSを設定

投影情報を持たないShapeファイルを読み込むと投影情報の確認ダイアログが表示される
これはオプションで新しいレイヤの投影座標系に「CRSダイアログを表示」が指定されているため

これを「プロジェクトのCRSを使用する」に変更するためにはQSettingで設定

QSettings().setValue( "/Projections/defaultBehavior", "useProject" )

※オプション画面のuiはqgsoptionbase.ui

プロジェクトのCRSを設定

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

Pythonでプラグインをロードする

どこかのサイトで以下のコードでプラグインをロードできるとあった。
試してみるとプラグインの選択画面ではチェックが付くが実際にはプラグインの中の関数は呼ばれない

qgis.utils.loadPlugin('myplugin')

以下も同時にやるといいみたい。
でもチェックが付かない?

qgis.utils.startPlugin('myplugin')
カテゴリー: QGIS

起動時に実行するPythonスクリプトではPluginの設定はできない

QGISは実行パラメータ–codeで起動時にPythonのスクリプトを実行できる。

どこかのサイトでこのスクリプトの中で以下のようにQgsSettingsを設定すれば起動時にプラグインをロードできると記載があったが

QSettings().setValue( "/PythonPlugins/myplugin", True )

これはダメ!

起動時に指定したスクリプトはプラグインのロード終了後実行されるので、影響がない

カテゴリー: QGIS