More Related Content
Similar to PythonとQGISで簡単処理 (20)
More from Kazutaka ishizaki (11)
PythonとQGISで簡単処理
- 2. 講座の流れ
1.ハンズオン 1
– モデラー を触ってみる –
2.ハンズオン 2
– Pythonを触ってみる –
3.ハンズオン 3、Pythonの説明
– Pythonの簡単なコードを記載してみる –
4.ハンズオン 4
– いろいろ試します -
2
- 3. 講座前の確認
3
• 本講座で説明するQGISはVer 3.0.2です。
(QGIS Ver3.0.3が出ておりますが、バージョンによる違いは考慮していません)
• OSはWindows7 Professionalです。
• 講座用のデータをパソコンにコピーしてください。
本講座で利用するデータについて
・統計データの出典:総務省 統計局
政府統計の総合窓口(e-Stat)(http://www.e-stat.go.jp/)
- 8. 1-3 地図データの表示 - 1
8
• QGISに地図データを表示します。
• 統計データ 札幌市中央区「h27ka01101.shp」を表示します。
• 表示方法は2種類あります。
メインメニュー - [レイヤ] –[レイヤの追加] – [ベクタレイヤ追加]
「データソースマネージャー|ベクタ」から“ファイル”を選択し、 “ブラウズ”ボタン
→ 「h27ka01101」を指定後“追加”ボタンを選択し、“閉じる”ボタンを選択
方法1
- 12. 1-7 フィールドの追加 - 1
12
• プロセッシングツールを利用して属性テーブルにフィールドを
追加してみます。
• [ベクタテーブル] – [属性テーブルにフィールドを追加]を
選択します。
- 13. 1-8 フィールドの追加 - 2
13
• フィールド名に“foss4g”と入力します。
• 追加されたのボタンを押し、“Save to File…”を選択します。
- 14. 1-9 フィールドの追加 - 3
14
• フォルダを“C:handsonout”
• ファイル名を“h27ka01101.shp”
• ファイルの種類を“SHP file”を選択
“保存”ボタンを押します
- 15. 1-10 フィールドの追加 - 4
15
• このまま実行すると、属性値の文字化けが発生します。
• 追加されたのボタンを押し、“ChangeFileEncoding”を選択します。
- 19. 1-14 フィールドの追加 - 8
19
追加された“foss4g”フィールドが
確認できます。
“地物情報表示”ボタンをオンにしてから
ポリゴンを選択します。
“追加された”レイヤを選択
“h27ka01101.shp”レイヤは非表示
- 20. 1-15 処理モデラーの表示 - 1
20
• 処理モデラーの表示方法を説明します。
• 属性ツールバー から“ツールボックス”ボタン を選択します。
• “プロセッシングツールボックス”が表示されます。
- 21. 1-16 処理モデラーの表示 - 2
21
• プロセッシングツールボックスから“モデルボタン を
選択します。
・“Create new Model…”を選択します。
・処理モデラーが表示されました。
- 23. 1-18 フィールドの追加 - 1
23
• [属性テーブルにフィールドを追加]を処理モデラーで試します。
• [ベクタテーブル] – [属性テーブルにフィールドを追加]を
ダブルクリックします。
- 25. 1-20 フィールドの追加 - 3
25
• 不足しているパラメータの確認。
入力レイヤ
フィールド名
追加された
“キャンセル”ボタンを押して、一度閉じます。
- 26. 1-21 フィールドの追加 - 4
26
• “入力”タブを選択し、“Vector Layer”を選択します。
• パラメータ定義ダイアログが表示されます。
“Layer”を入力
“ポリゴン”を選択
“OK”ボタンを選択
- 27. 1-22 フィールドの追加 - 5
27
• “String”を選択します。
• パラメータ定義ダイアログが表示されます。
“Field”を入力
“OK”ボタンを選択
- 28. 1-23 フィールドの追加 - 6
28
• “アルゴリズム”タブを指定し、[ベクタテーブル] – [属性テーブル
にフィールドを追加]をダブルクリックします。
指定したパラメータ名が
表示されている事が確認できます。
- 29. 1-24 フィールドの追加 - 7
29
• 「追加された」にパラメータ名“OutFile”を入力し、“OK”ボタンを
押します。
“OutFile”を入力します。
“OK”ボタンを選択
- 30. 1-25 フィールドの追加 - 8
30
• “属性テーブルにフィールドを追加”の処理モデラーが
できました。モデルを実行します。
“モデルの実行”ボタンを選択します。
- 31. 1-26 フィールドの追加 - 9
31
• Filed名に“addf”と入力します。
• OutFile名に“C:handsonoutOutFile.shp”と入力します。
- 32. 1-27 フィールドの追加 - 10
32
• “ChangeFileEncoding”が“UTF-8”か確認します。
UTF-8以外の場合はUTF-8へ変更します。
“実行”ボタンを選択
- 33. 1-28 フィールドの追加 - 11
33
追加された“addf”フィールドが
確認できます。
“地物情報表示”ボタンをオンにしてから
ポリゴンを選択します。
“OutFile”レイヤを選択
“h27ka01101.shp”レイヤは非表示
- 35. 1-30 範囲で切り抜きクリップ - 1
35
• [属性テーブルにフィールドを追加]から[範囲で切り抜きクリップ]
の連続処理を処理モデラーで試します。
・ [レイヤ] - [レイヤの作成] – [新規シェープファイル]を選択します。
“OK”ボタンを選択
“C:handsonouthani.shp”を入力
“ポリゴン”を選択
- 36. 1-31 範囲で切り抜きクリップ - 2
36
• “hani”レイヤが追加されます。処理モデラーを表示します。
• “hani”レイヤにポリゴンを作成します。
• 処理モデラーを閉じた場合は“モデルを開く”ボタンから
保存したモデルを開いてください。
- 37. 1-32 範囲で切り抜きクリップ - 3
37
• [ベクタオーバレイ] – [範囲で切り抜きクリップ]を
ダブルクリックし、不足しているパラメータを確認します。
領域(xmin、xmax、ymin、ymax)
“OK”ボタンを選択
- 38. 1-33 範囲で切り抜きクリップ - 4
38
• “入力”タブを指定し、“Extent”を選択します。
• パラメータ定義ダイアログが表示されます。
“Extent”を入力
“OK”ボタンを選択
- 39. 1-34 範囲で切り抜きクリップ - 5
39
• “アルゴリズム”タブを指定し、[ベクタオーバレイ] –
[範囲で切り抜きクリップ]をダブルクリックします。
アルゴリズム ‘属性テーブルにフィールドを追加’の
‘追加された‘を選択
“OK”ボタンを選択
“Extent”を選択
“はい”を選択
“OutFile2”を入力
- 44. 1-39 範囲で切り抜きクリップ - 10
44
• OutFile2名に“C:handsonoutOutFile2.shp”と入力します。
• OutFile名の“アルゴリズムの実行後に出力ファイルを開く“の
チェックを外します。
“実行”ボタンを選択
- 45. 1-40 範囲で切り抜きクリップ - 11
45
追加された“addf2”フィールドが
確認できます。
“地物情報表示”ボタンをオンにしてから
ポリゴンを選択します。
“OutFile2”レイヤを選択
“h27ka01101.shp”、“hani”レイヤは非表示
- 46. 1-41 バッチ処理 - 1
46
• 作成したモデルからバッチ処理(繰り返し処理)する方法を
説明します。
• 中央区、北区、南区を利用するので“hani”レイヤのポリゴンの
大きさを調整しておきます。
ポリゴンが中央区、北区、南区
それぞれに重なるよう形状を
変更します。
- 47. 1-42 バッチ処理 - 2
47
• モデルを別名で保存しておきます。
• 再度、モデルを実行します。
• “Run as Batch Process..”を選択します。
- 49. 1-44 バッチ処理 - 4
49
• “Filed”に追加するフィールド名“addf2”と記載します。
• “Layer”に中央区、北区、南区のShapefileを指定します。
- 50. 1-45 バッチ処理 - 5
50
• “Extent”に”hani”レイヤを指定します。
• “OutFile2”にs1.shp、2s.shp、s3.shpのShapefile名を指定します。
- 51. 1-46 バッチ処理 - 6
51
• “Outfile”に中間ファイル用のtmp.shpを記載します。
• “実行”ボタンを押します。
- 52. 1-47 バッチ処理 - 7
52
• バッチ処理が実行されます。“バッチプロセスが完了しました”
メッセージが表示されたら、“OK”ボタンを押します。
- 53. 1-48 バッチ処理 - 8
53
“OutFile2”で指定したShapefileを
読込みます。
追加された“addf2”フィールドが
確認できます。
中央区、北区、南区が
“hani”レイヤで切り抜かれて
いる事が確認できます。
- 57. 2-1 Pythonコンソールの表示 - 1
57
• Pythonの処理はPythonコンソール上で行います。
• メインメニュー – [プラグイン] – [pythonコンソール」を選択します。
- 60. 2-4 Pythonコンソールの準備 - 1
60
• Pythonコンソールを利用する準備を行います。
• まず、モデルで試した“フィールドの追加”を行います。
• エディタに以下のソースを記載します。
import processing
Input_layer='C:/handson/1_sapporo_tyuou/h27ka01101.shp'
Field_name='addf3'
Added='C:/handson/out/outxxx.shp'
parameters = {
'INPUT':Input_layer,
'FIELD_NAME':Field_name,
'FIELD_TYPE':0,
'FIELD_LENGTH':10.0,
'FIELD_PRECISION':0.0,
'OUTPUT':Added}
processing.run('qgis:addfieldtoattributestable',parameters)
ここはスペースではなく、
タブを入れてください。
- 63. 2-7 Pythonコンソールの準備 - 4
63
• エラーを解決する方法は2つあります。
• 一つ目は“feedback = QgsProcessingFeedback()”を
追加する方法です。
processing.run('qgis:addfieldtoattributestable',parameters)
processing.run('qgis:addfieldtoattributestable',parameters, feedback = QgsProcessingFeedback())
- 64. 2-8 Pythonコンソールの準備 - 5
64
• 二つ目は“Processing.py”を書き換える方法です。
• エディタの内容を保存しておきます。保存後、QGISを閉じます。
“Save as”ボタンを押し、任意の場所に
pyファイルを保存します。
- 65. 2-9 Pythonコンソールの準備 - 6
65
• “C:Program FilesQGIS 3.0appsqgispython
pluginsprocessingcore”フォルダを開きます。
・ “Processing.py”ファイルをテキストエディタで開きます。
- 66. 2-10 Pythonコンソールの準備 - 7
66
• 47行目に“QgsProcessingFeedback”を追加します。
__revision__ = '$Format:%H$‘
import os
import traceback
from qgis.PyQt.QtCore import Qt, QCoreApplication
from qgis.PyQt.QtWidgets import Qapplication
from qgis.PyQt.QtGui import Qcursor
from qgis.utils import iface
from qgis.core import (QgsMessageLog,
QgsApplication,
QgsMapLayer,
QgsProcessingProvider,
QgsProcessingAlgorithm,
QgsProcessingException,
QgsProcessingParameterDefinition,
QgsProcessingOutputVectorLayer,
QgsProcessingOutputRasterLayer,
QgsProcessingOutputMapLayer,
QgsProcessingOutputMultipleLayers)
この後に追加します。
- 67. 2-11 Pythonコンソールの準備 - 8
67
• 追加後は、以下のようになります。
__revision__ = '$Format:%H$‘
import os
import traceback
from qgis.PyQt.QtCore import Qt, QCoreApplication
from qgis.PyQt.QtWidgets import Qapplication
from qgis.PyQt.QtGui import Qcursor
from qgis.utils import iface
from qgis.core import (QgsMessageLog,
QgsApplication,
QgsMapLayer,
QgsProcessingProvider,
QgsProcessingAlgorithm,
QgsProcessingException,
QgsProcessingParameterDefinition,
QgsProcessingOutputVectorLayer,
QgsProcessingOutputRasterLayer,
QgsProcessingOutputMapLayer,
QgsProcessingOutputMultipleLayers,
QgsProcessingFeedback)
カンマを忘れずに
入れてください。
- 70. 2-14 Pythonコンソールの準備 - 11
70
追加された“addf3”フィールドが
確認できます。
“地物情報表示”ボタンをオンにしてから
ポリゴンを選択します。
“outxxx”レイヤを選択
- 71. 2-15 複数ファイルを一括変換 - 1
71
• 中央区、北区、東区を一括変換します。
• エディタに以下のソースを記載します。
import processing
Input_layer=[
'C:/handson/1_sapporo_tyuou/h27ka01101.shp',
'C:/handson/2_sapporo_kita/h27ka01102.shp',
'C:/handson/3_sapporo_higashi/h27ka01103.shp'
]
Field_name='addf3'
for i,SetLayer in enumerate(Input_layer):
Added='C:/handson/out/out' + str(i+1) + '.shp'
parameters = {
'INPUT':SetLayer,
'FIELD_NAME':Field_name,
'FIELD_TYPE':0,
'FIELD_LENGTH':10.0,
'FIELD_PRECISION':0.0,
'OUTPUT':Added}
processing.run('qgis:addfieldtoattributestable',parameters)
ここはスペースではなく、
タブを入れてください。
- 72. 2-16 複数ファイルを一括変換 - 2
72
• 中央区、北区、東区に‘addf3‘フィールドを追加した
Shapefileが3つ作成されます。QGISに表示して確認します。
- 73. 2-17 外部ファイルを指定して変換- 1
73
• 外部ファイルにShapefile名を指定して一括変換します。
• 外部ファイルをテキストエディタで用意します。
• 中央区、北区、東区、白石区、豊平区、南区を一括変換します。
• “C:handsonsapporo.txt”として保存します。
C:/handson/1_sapporo_tyuou/h27ka01101.shp,
C:/handson/2_sapporo_kita/h27ka01102.shp,
C:/handson/3_sapporo_higashi/h27ka01103.shp,
C:/handson/4_sapporo_shiroishi/h27ka01104.shp,
C:/handson/5_sapporo_toyohira/h27ka01105.shp,
C:/handson/6_sapporo_minami/h27ka01106.shp
- 74. 2-18 外部ファイルを指定して変換- 2
74
• エディタに以下のソースを記載します。
import processing
f = open('C:/handson/sapporo.txt', 'r')
fvalue = f.read()
Input_layer= fvalue.split(',n')
Field_name='addf3'
for i,SetLayer in enumerate(Input_layer):
Added='C:/handson/out/out2_' + str(i+1) + '.shp'
parameters = {
'INPUT':SetLayer,
'FIELD_NAME':Field_name,
'FIELD_TYPE':0,
'FIELD_LENGTH':10.0,
'FIELD_PRECISION':0.0,
'OUTPUT':Added}
processing.run('qgis:addfieldtoattributestable',parameters)
f.close()
インデントを入れます。
- 77. 2-21 フォルダを指定して変換 - 2
77
import processing
import os
ShpPath = 'C:/handson/1_sapporo_tyuou'
Input_layer = []
Field_name='addf3'
for d in os.listdir(ShpPath):
if(d[-4:] == '.shp'):
Input_layer.append(d)
for i,SetLayer in enumerate(Input_layer):
Added='C:/handson/out/out_' + SetLayer
InLayer = ShpPath + '/' + SetLayer
parameters = {
'INPUT':InLayer,
'FIELD_NAME':Field_name,
'FIELD_TYPE':0,
'FIELD_LENGTH':10.0,
'FIELD_PRECISION':0.0,
'OUTPUT':Added}
processing.run('qgis:addfieldtoattributestable',parameters)
f.close()
- 79. 2-20 文字化け - 1
79
• 文字化けをする場合があります。
• みなさんの環境ではいかがでしょうか?
- 80. 2-21 文字化け - 2
80
• ShapefileはEsri社が開発したフォーマットです。
• ArcGISで採用されています。
• ArcGIS10.2.1より、Shapefileの文字コードがSJISからUTF-8へ
変更されました。
• SJISは日本語表示のコードでWindowsに採用されています。
• UTF-8は世界中のコードに対応しており、現在主流のコードに
なります。
• 現在もShapfileはSJISとUTF-8版が混在している状態です。
• SJIS版のShapefileをQGISのPythonコンソールで実行すると
環境により文字化けする事があります。
- 81. 2-22 文字化け - 3
81
• 文字化けした場合はUTF-8のShapefileに事前に変換します。
• QGISの“Save as”からエンコーディングから“UTF-8”を選択して
保存する事でSJISからUTF-8のShapefileを変換できます。
• ogr2ogrを利用する事で、バッチ処理で一括変換が可能です。
- 82. 2-23 データエンコーディングの確認 - 1
82
• Shapefileの文字コードがわからない場合は、QGISのレイヤ
プロパティのデータエンコーディングを確認します。
エンコーディングが“System”、“Shift JIS”で
文字化けしなければ、SJISのShapefileです。
文字化けして
いないか確認
- 87. 3-2 pythonの記述ルール - 1
87
• Pythonは複合文という記述の仕方をします。
• 例えば条件式のifの場合は以下のように記述します。
ヘッダ文の最後は「:」コロンを入れます。
実行結果は以下のようになります。
ヘッダ文:
文
x = 1
y = 1
if x == y:
print('equal')
else:
print('not equal')
インデントを入れます。
- 88. 3-3 pythonの記述ルール - 2
88
• 繰り返し処理のwhileの場合は以下のように記述します。
実行結果は以下のようになります。
x = 1
while x < 5:
print ( str(x) )
x += 1
- 89. 3-4 pythonの記述ルール - 3
89
• 繰り返し処理のforの場合は以下のように記述します。
実行結果は以下のようになります。
これは“foss4g”という文字列のシーケンス(順番に並んでいる)を
forで取り出す処理になります。
for x in 'foss4g':
print( str(x) )
- 90. 3-5 pythonの記述ルール - 4
90
• シーケンスの番号を取得する場合はenumerate関数を
利用します。
実行結果は以下のようになります。
for i,x in enumerate('foss4g'):
print( str(i) + ' -> ' + str(x))
- 91. 3-6 pythonの記述ルール - 5
91
• forの別の方法の場合は以下のように記述します。
実行結果は以下のようになります。
for x in range(5):
print( str(x) )
- 92. 3-7 pythonの記述ルール - 6
92
• forのさらに別の方法の場合は以下のように記述します。
実行結果は以下のようになります。
for x in range(5,10):
print( str(x) )
- 96. 4-2 pythonコンソールで日本語- 2
96
• 以下に書き換えて、コンソールから実行します。
実行結果は以下のようになります。
exec(open('C:/Users/ishizaki/AppData/Local/Temp/tmpw_ze80so.py'.encode('utf-8')).read())
exec(open('C:/Users/ishizaki/AppData/Local/Temp/tmpw_ze80so.py',encoding='utf-8').read())
書き換えたコードをコンソールに貼り付けて、“Enter”キーを押します。
エラーにならず、処理されました。
- 97. 4-3 pythonコンソールで日本語- 3
97
• 前に試したShapefileを読み込んでフィールド名を追加する
例のShapefile名を日本語で試してみましょう。
事前に中央区Shapefileのフォルダ名、ファイル名を変更します。
“スクリプト実行”ボタンでエラーにしてから
import processing
Input_layer='C:/handson/日本語で/札幌市中央区.shp'
Field_name='addf3'
Added='C:/handson/out/出力.shp'
parameters = {
'INPUT':Input_layer,
'FIELD_NAME':Field_name,
'FIELD_TYPE':0,
'FIELD_LENGTH':10.0,
'FIELD_PRECISION':0.0,
'OUTPUT':Added}
processing.run('qgis:addfieldtoattributestable',parameters)
- 108. 4-14 プロバイダー名を探す- 9
108
• Add field to attributes tableが表示されます。
• パラメータ名を確認します。
parameters = {
'INPUT':SetLayer,
'FIELD_NAME':Field_name,
'FIELD_TYPE':0,
'FIELD_LENGTH':10.0,
'FIELD_PRECISION':0.0,
'OUTPUT':Added}
- 109. 4-15 プロバイダー名を探す- 10
109
• アウトプット名を確認します。
parameters = {
'INPUT':SetLayer,
'FIELD_NAME':Field_name,
'FIELD_TYPE':0,
'FIELD_LENGTH':10.0,
'FIELD_PRECISION':0.0,
'OUTPUT':Added}
- 110. 4-16 プロバイダー名を探す- 11
110
• エディタに書き込むパラメータやアウトプット名がわからない
場合は、わざとエラーにすると名称がわかります。
わざと、パラメータ名を間違ってみます。
スクリプト実行
パラメータ名が表示されます。
- 112. 4-18 続けて処理 - 1
112
• ”属性テーブルにフィールドを追加“から
“範囲で切り抜きクリップ”を続けて処理してみます。
- 113. 4-19 続けて処理 - 2
113
import processing
f = open('C:/handson/sapporo.txt', 'r')
fvalue = f.read()
Input_layer= fvalue.split(',n')
Field_name='addf4'
for i,SetLayer in enumerate(Input_layer):
Added='C:/handson/out/out2_' + str(i+1) + '.shp'
parameters1 = {
'INPUT':SetLayer,
'FIELD_NAME':Field_name,
'FIELD_TYPE':0,
'FIELD_LENGTH':10.0,
'FIELD_PRECISION':0.0,
'OUTPUT':"C:/handson/out/tmp.shp"}
processing.run('qgis:addfieldtoattributestable',parameters1)
- 114. 4-20 続けて処理 - 3
114
parameters2 = {
'INPUT':SetLayer,
'EXTENT':'C:/handson/hani.shp',
'CLIP':1,
'OUTPUT':Added
}
processing.run('qgis:extractbyextent',parameters2)
LayerName = SetLayer.split('/')
layer = iface.addVectorLayer(Added, LayerName[2], 'ogr')
f.close()
作成されたShapefileを読み込む処理を追記します。
- 116. 4-22 条件により処理を分ける - 1
116
• 条件により、処理を分ける例を試します。
• Hani2、hani3というShapefileを作成し、適当なポリゴンを
それぞれ一つづつ作成します。
- 117. 4-23 条件により処理を分ける - 2
117
import processing
f = open('C:/handson/sapporo.txt', 'r')
fvalue = f.read()
Input_layer= fvalue.split(',n')
Hani2 = 'C:/handson/hani2.shp'
Hani3 = 'C:/handson/hani3.shp'
for i,SetLayer in enumerate(Input_layer):
Added='C:/handson/out/out3_' + str(i+1) + '.shp'
parameters = {
'INPUT':SetLayer,
'OVERLAY':Hani2,
'OUTPUT':Added}
processing.run('qgis:clip',parameters)
LayerName = SetLayer.split('/')
layer = iface.addVectorLayer(Added, LayerName[2], 'ogr')
f.close()
- 119. 4-25 条件により処理を分ける - 4
119
• 以下の条件で分けます。
• 中央区、南区はhani2でクリップする。
• 北区、東区、白石区、豊平区はhani3でクリップする。
import processing
f = open('C:/handson/sapporo.txt', 'r')
fvalue = f.read()
Input_layer= fvalue.split(',n')
Hani2 = 'C:/handson/hani2.shp'
Hani3 = 'C:/handson/hani3.shp'
for i,SetLayer in enumerate(Input_layer):
Added='C:/handson/out/out3_' + str(i+1) + '.shp'
parameters2 = {
'INPUT':SetLayer,
'OVERLAY':Hani2,
'OUTPUT':Added}
- 120. 4-26 条件により処理を分ける - 5
120
parameters3 = {
'INPUT':SetLayer,
'OVERLAY':Hani3,
'OUTPUT':Added}
if i+1 in { 1 , 6 }:
processing.run('qgis:clip',parameters2)
else:
processing.run('qgis:clip',parameters3)
LayerName = SetLayer.split('/')
layer = iface.addVectorLayer(Added, LayerName[2], 'ogr')
f.close()
- 122. 4-28 ベクタレイヤの結合 - 1
122
• ベクタレイヤの結合を説明します。
• 中央区、南区、北区、東区、白石区、豊平区を結合します。
import processing
f = open('C:/handson/sapporo.txt', 'r')
fvalue = f.read()
Input_layer= fvalue.split(',n')
OutputLayer = 'C:/handson/out/out4.shp'
parameters = {
'INPUT':SetLayer,
'LAYERS':Input_layer,
'OUTPUT':OutputLayer}
processing.run('qgis:mergevectorlayers',parameters)
layer = iface.addVectorLayer(OutputLayer, 'merge', 'ogr')
f.close()
- 124. 4-30 ベクタレイヤの結合 - 3
124
• 結合するshapefileを直接記載する場合はリスト型で指定します。
import processing
Input_layer = [
'C:/handson/1_sapporo_tyuou/h27ka01101.shp',
'C:/handson/2_sapporo_kita/h27ka01102.shp',
'C:/handson/3_sapporo_higashi/h27ka01103.shp',
'C:/handson/4_sapporo_shiroishi/h27ka01104.shp',
'C:/handson/5_sapporo_toyohira/h27ka01105.shp',
'C:/handson/6_sapporo_minami/h27ka01106.shp'
]
OutputLayer = 'C:/handson/out/out5.shp'
parameters = {
'INPUT':SetLayer,
'LAYERS':Input_layer,
'OUTPUT':OutputLayer}
processing.run('qgis:mergevectorlayers',parameters)
layer = iface.addVectorLayer(OutputLayer, 'merge', 'ogr')
リスト型は[ ]で指定します。
- 125. 4-31 ベクタレイヤの分割 - 1
125
• ベクタレイヤの分割を説明します。
• さきほど結合したShapefileを人口毎にファイルを分けます。
import processing
f = open('C:/handson/sapporo.txt', 'r')
fvalue = f.read()
Input_layer= fvalue.split(',n')
OutputLayer = 'C:/handson/out/out4.shp'
OutputFolder = 'C:/handson/out2'
SetField = 'JINKO'
parameters1 = {
'INPUT':SetLayer,
'LAYERS':Input_layer,
'OUTPUT':OutputLayer}
processing.run('qgis:mergevectorlayers',parameters1)
- 126. 4-32 ベクタレイヤの分割 - 2
126
parameters2 = {
'INPUT':SetLayer,
'FIELD':SetField,
'OUTPUT':OutputFolder}
processing.run('qgis:splitvectorlayer',parameters2)
f.close()
- 129. 4-35 フィールド計算機 - 1
129
• 計算した結果を新しいフィールドへ格納します。
• 都道府県名+市区町村名+町丁・字等名称を格納します。
import processing
f = open('C:/handson/sapporo.txt', 'r')
fvalue = f.read()
Input_layer= fvalue.split(',n')
Field_name='addf4'
SetFormula='"PREF_NAME" + "CITY_NAME" + "S_NAME" '
for i,SetLayer in enumerate(Input_layer):
Added='C:/handson/out/out5_' + str(i+1) + '.shp'
- 130. 4-36 フィールド計算機 - 2
130
parameters = {
'INPUT':SetLayer,
'NEW_FIELD':Field_name,
'FIELD_NAME':Field_name,
'FIELD_TYPE':2,
'FIELD_LENGTH':20,
'FIELD_PRECISION':3,
'FORMULA':SetFormula,
'OUTPUT':Added
}
processing.run('qgis:fieldcalculator',parameters)
f.close()
0:double(浮動小数点)
1:qlonglong(整数)
2:string(文字列)
3:qdate(日付)
- 131. 4-37 フィールド計算機 - 3
131
データエンコーディングは“UTF-8”へ変更
• Shapefileを読み込み確認します。
計算された値が格納されているか
確認します。
- 133. 4-39 フィールド計算機 - 5
133
• 浮動小数点の値を格納してみます。
import processing
f = open('C:/handson/sapporo.txt', 'r')
fvalue = f.read()
Input_layer= fvalue.split(',n')
Field_name='addf4'
SetFormula='"KEY_CODE" + 0.005'
for i,SetLayer in enumerate(Input_layer):
Added='C:/handson/out/out6_' + str(i+1) + '.shp'
- 134. 4-40 フィールド計算機 - 6
134
parameters = {
'INPUT':SetLayer,
'NEW_FIELD':Field_name,
'FIELD_NAME':Field_name,
'FIELD_TYPE':0,
'FIELD_LENGTH':20,
'FIELD_PRECISION':3,
'FORMULA':SetFormula,
'OUTPUT':Added
}
processing.run('qgis:fieldcalculator',parameters)
f.close()
0:double(浮動小数点)
1:qlonglong(整数)
2:string(文字列)
3:qdate(日付)
- 135. 4-41 フィールド計算機 - 7
135
データエンコーディングは“UTF-8”へ変更
• Shapefileを読み込み確認します。
計算された値が格納されているか
確認します。