QGIS3のインストール手順

このページではQGIS3.2をインストールする手順を紹介しています。現在QGISは3.8.2ですので、もしかしたら、このページの内容はそのまま使えないかもしれません。


インストーラーからインストールする

インストーラーをダウンロードする

インストーラーを選択する

f:id:Chiakikun:20180901133427p:plain

https://www.qgis.org/ja/site/forusers/download.html にアクセスして、赤丸部分のインストーラーを選択します。このインストーラーは一度ダウンロードすれば、後はネットワークに接続しなくても、インストールすることができます。ネットワークインストーラーですと、インストールが終わるまでネットに接続していなければならない点が少し煩わしく感じたので、スタンドアロンインストーラを選択しました。

 

インストーラーを保存する

f:id:Chiakikun:20180901133638p:plain

インストーラーを保存するか聞いてくるので、ファイルを保存ボタンをクリックします。


インストールする

インストーラーを実行する

f:id:Chiakikun:20180901133714p:plain

ダウンロードしたインストーラーを実行します。

 

契約条件を読む

f:id:Chiakikun:20180901133738p:plain

契約条件を読んだら『同意する』ボタンを押下します。

 

データセットの選択

f:id:Chiakikun:20180901133810p:plain

使用したいデータがある場合は、ここで選択してください。何も選択しなくてもQGISの使用に全く問題はありません。『インストール』ボタンを押下します。

インストール開始

f:id:Chiakikun:20180901133928p:plain

QGISのインストールが始まります。

 

f:id:Chiakikun:20180901133955p:plain

このダイアログが出たら、インストール完了です。通常使用ならこれで以上です。


パスを設定する

QGISに付属のPythonやGDAL等便利なコマンドを使えるようにするために、以下のページではパスのの設定方法を紹介しています。ご興味があれば、ご覧ください。QGISを使うだけでしたら、パスは設定しなくても問題はありません。

chiakikun.hatenadiary.com


ソースからインストールする

基本的にはこちらQGIS公式の通りにするだけです。 

環境構築

f:id:Chiakikun:20210227133002p:plain

まずはいろいろダウンロードしていきます。

Visual Studio 2015

上の画像①からVisual Studio 2015 Communitiy Editionをダウンロードして実行します。

 

f:id:Chiakikun:20210227133249p:plain

f:id:Chiakikun:20210227133529p:plain

f:id:Chiakikun:20210227133545p:plain

インストールするパッケージは上の画像②で示されているように、"Common Tools for Visual C++ 2015"と"Tools (1.4.1) and Windows 10 SDK (10.0.14393)" under "Universal Windows App Development Tools"を選択してください。

CMake

上の画像③のリンクからCMakeをインストールします。

Cygwin

上の画像④のリンクからcygwinインストーラーをダウンロードします。インストールするパッケージは「bison」、「flex」、「git」です。

f:id:Chiakikun:20210227134123p:plain

f:id:Chiakikun:20210227134141p:plain

f:id:Chiakikun:20210227134158p:plain

osgeo4w

上の画像⑤のリンクからインストーラーをダウンロードします。インストールするパッケージは「qgis-dev-deps」を選択します。Searchで入力すると簡単に見つかります。

f:id:Chiakikun:20210227134423p:plain

ninja

 上の画像⑥のリンクからダウンロードします。ninja.exeを「C:\OSGeo4W64\bin\」にコピーしてください。

ソースダウンロード

デスクトップに出来ている(はず)の「Cygwin64 Terminal」を管理者権限で実行します。

f:id:Chiakikun:20210227135023p:plain

上の画像のコマンドをCygwin Terminalで実行していきます。

 

f:id:Chiakikun:20210227135237p:plain

実行している様子。

ソリューションファイル作成

C:\OSGeo4W64\OSGeo4W-dev.bat」を作成します。中身は下の通り。

    @echo off
    call C:\OSGeo4W64\QGIS\ms-windows\osgeo4w\msvc-env.bat x86_64
    @cmd

 このバッチを実行した後、「C:\OSGeo4W64\QGIS\ms-windows\osgeo4w」に移動して

「configonly.bat」を実行します。

f:id:Chiakikun:20210227143000p:plain

ソリューションファイルを作成している様子。

 

f:id:Chiakikun:20210227143152p:plain

もし「Could NOT find ZSTD (missing: ZSTD_LIBRARY ZSTD_INCLUDE_DIR)」とエラーが出たので、以下のようにしました。

https://github.com/facebook/zstd/releases」からソースとバイナリをダウンロードしてきます。

バイナリのzipファイルのincludeフォルダ内の中身を「C:\OSGeo4W64\include」にコピーしました。

ソースをMTオプションでコンパイルして、作成されたlibzstd_static.libをzstd.libにリネームして「C:\OSGeo4W64\lib」にコピーしました。

コンパイルする

ここまでで、ソリューションファイルが「C:\OSGeo4W64\QGIS\ms-windows\osgeo4w\build-qgis-test-x86_64\qgis.sln」に出来ていることと思います。ソリューションファイルを実行する前にOSGeo4W-dev.batと実行して、「call gdal-dev-env.bat」コマンドを実行します。

f:id:Chiakikun:20210227144108p:plain

バッチファイルを実行したら、「devenv」を実行します。Visual Studioが起動するので、作成したソリューションファイルを開きます。

 

f:id:Chiakikun:20210227144701p:plain

「ALL_BUILD」ターゲットを実行します。とても時間がかかるのでしばらくお待ちください。

無事ビルドできたら、デバッグができるかも確認しておきます。「qgis」ターゲットで右クリックの「デバッグ」メニューからデバッグを実行すると、qgisが起動して、Visual Studioデバッグモードになります。

f:id:Chiakikun:20210227145219p:plain

デバッグしている様子。

 

インストール

f:id:Chiakikun:20210227145303p:plain

インストールは「インストール」ターゲットをビルドすると、「C:\OSGeo4W64\apps\qgis-test\bin」にqgis.exeが作成されます。実行してみると、色々エラーが出ることと思います。最終的にqgis.exeと同じフォルダ階層に以下の内容のqgis.envを置くことでエラーが出なくなりました。バイナリインストールしてあるPCから抜いてきて少し編集したものなので、無駄なところがあるかもしれません。

PATH=C:\OSGeo4W64\apps\gdal-dev\bin;C:\OSGeo4W64\apps\proj-dev\bin;C:\OSGeo4W64\apps\qgis-test\bin;C:\OSGeo4W64\apps\Python37;C:\OSGeo4W64\apps\Python37\Scripts;C:\OSGeo4W64\apps\qt5\bin;C:\OSGeo4W64\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\system32\WBem
GDAL_DATA=C:\OSGeo4W64\share\gdal
GDAL_DRIVER_PATH=C:\OSGeo4W64\bin\gdalplugins
GDAL_FILENAME_IS_UTF8=YES
GEOTIFF_CSV=C:\OSGeo4W64\share\epsg_csv
JPEGMEM=1000000
OSGEO4W_ROOT=C:\OSGeo4W64
PROJ_LIB=C:\OSGeo4W64\share\proj
PYTHONHOME=C:\OSGeo4W64\apps\Python37
PYTHONPATH=C:\OSGeo4W64\apps\Python37;C:\OSGeo4W64\apps\Python37\Scripts;C:\OSGeo4W64\apps\qgis-test\python;C:\OSGeo4W64\apps\qgis-test\python\plugins
QGIS_PREFIX_PATH=C:\OSGeo4W64\apps\qgis-test\
QT_PLUGIN_PATH=C:\OSGeo4W64\apps\qgis-ltr\qtplugins;C:\OSGeo4W64\apps\qt5\plugins
VSI_CACHE=TRUE
VSI_CACHE_SIZE=1000000
O4W_QT_PREFIX=C:/OSGeo4W64/apps/Qt5
O4W_QT_BINARIES=C:/OSGeo4W64/apps/Qt5/bin
O4W_QT_PLUGINS=C:/OSGeo4W64/apps/Qt5/plugins
O4W_QT_LIBRARIES=C:/OSGeo4W64/apps/Qt5/lib
O4W_QT_TRANSLATIONS=C:/OSGeo4W64/apps/Qt5/translations
O4W_QT_HEADERS=C:/OSGeo4W64/apps/Qt5/include

f:id:Chiakikun:20210227150259p:plain

実行している様子。国土地理院が提供している地理院タイルを表示させています。

 

最後までご覧頂き、ありがとうございました

QGISに付属の便利なコマンド

QGISをインストールすると、便利なコマンドが付いてくるので、いくつか使い方を紹介します。 このページではQGISのバージョンは3.6、PowerShellのバージョンは5.1.17763.592を使っています。

こちらのページで紹介した、環境変数の設定までを済ませておいて下さい。


ファイルを変換する

ogr2ogr -f "MapInfo File" 変換後ファイル.mif 変換前ファイル.shp

変換前.shpを変換後ファイル.mifに変換します。-f のオプションに渡す文字列には、変換後のファイルフォーマットを指定します。どんなフォーマットが対応しているかは、次のコマンドで確認できます。

ogrinfo --formats

日本語が文字化けする場合

ogr2ogr -lco ENCODING=cp932 -f "MapInfo File" 変換後ファイル.mif 変換前ファイル.shp

Shift-JISで出力したい場合は、オプションに「-lco ENCODING=cp932」を指定します。


ファイルの座標系を変える

ogr2ogr -t_srs EPSG:2443 -s_srs EPSG:4326 変換後ファイル.mif 変換前ファイル.mif

-t_srsで変換後ファイルの座標系を指定します。

-s_srsで変換前ファイルの座標系を指定します。

ファイルをまとめて変換する

指定したフォルダ内のシェープファイルKMLに変換するコードです。

$env:GDAL_DATA="C:\Program Files\QGIS 3.6\share\epsg_csv" # GDALが使うデータフォルダ
$before=".shp"               # 変換前の拡張子
$after=".kml"                # 変換後の拡張子
$dir="d:\変換したいファイル" # 変換したいファイルが格納されているフォルダ
$type="KML"                  # 変換後のファイルタイプ

New-Item $dir\"conv" -itemType Directory -Force
foreach ($s in Get-ChildItem $dir\ -Name *$before)
{
 $new = [System.IO.Path]::ChangeExtension($s, $after)
 ogr2ogr -f $type $dir\conv\$new $dir\$s
}

上のコードの1~5行目を編集して、PowerShellに貼り付けて実行してみてください。


PostGISにインポートする

ogr2ogr -lco encoding=CP932 PG:"host=localhost user=ユーザー名 dbname=インポート先データベース password=〇〇〇〇" -nln レイヤ名 インポートしたいファイル

GeoPackageにGeoTiffを追加する

gdal_translate -of GPKG 追加したいtiff.tif 追加先.gpkg -co  APPEND_SUBDATASET=YES -co RASTER_TABLE=テーブル名

追加先.gpkgが存在しない場合は、作成されます。

GeoPackageにシェープファイルを追加する

$dst="F:\〇〇.gpkg" # 追加先のgeopackageファイル

foreach ($s in Get-ChildItem  .\ -Name *.shp)
{
  ogr2ogr -append  $dst $s
}

shpが格納されているフォルダに移って、上のコードの1行目を編集して、PowerShellに貼り付けて実行してみてください。

お疲れさまでした。

QGIS3 Plugin Builderでプラグイン作成

このページでは、QGISプラグイン「Plugin Builder」についてご紹介していきます。Plugin Builderは、QGISプラグインの雛形を作成してくれる補助ツールです。このプラグインを使えば、QGISプラグイン作成が大分楽になります。


Plugin Builderをインストールする

プラグイン管理のダイアログを表示する

f:id:Chiakikun:20180901143311p:plain

QGISを起動して、メニューの『プラグイン』→『プラグインの管理とインストール』を選択して下さい。

 

Plugin Builderを検索する

f:id:Chiakikun:20180901143419p:plain

Plugin Builderをインストールします。上の赤丸の検索窓で検索すると見つけやすいです。

 

f:id:Chiakikun:20180901143512p:plain

候補に出てきた『Plugin Builder 3』を選択してインストールして下さい。

 

メニューに表示される

f:id:Chiakikun:20180901143601p:plain

Plugin Builderがメニューから選択できるようになりました。


Plugin Builderを使ってみる

必要項目を入力する

f:id:Chiakikun:20180901143949p:plain

Plugin Builderが使えるようになったので、試しにPlugin Builderでプラグインのひな型を作成して実行してみます。メニューの『プラグイン』→『Plugin Builder』を実行し、上の画面のように必要事項を入力してNextボタンを押して下さい。

 

作成するプラグインの説明文を入力する

f:id:Chiakikun:20180901144110p:plain

f:id:Chiakikun:20180901144150p:plain

この辺りは適当に入力して下さい。

 

追加コンポーネントを選択

f:id:Chiakikun:20180901144232p:plain

今回はそのままにしました。本家サイトを確認しましたが、必須ではないようです。

チェックを全部外して実行してみましたが、問題も発生していません。

 

プラグインのレポジトリ等

f:id:Chiakikun:20180901144324p:plain

ここもそのままで、ただ一応お試しプラグインなので、赤丸部分のチェックボックスにチェックを入れておきました。

 

f:id:Chiakikun:20180901144444p:plain

作成するプラグインの保存先を指定します。私は『E:\QGIS Plugin』フォルダを指定しました。赤線部分がこのプラグインの保存先になります。画像では保存先がDドライブになっていますが、気にしないでください。

 

pyrcc5 was not found ?

f:id:Chiakikun:20190922130700p:plain

「The resource compiler pyrcc5 was not found in your path.」と警告ダイアログが表示されるので、PowerShellを起動して次のコードを入力します。

    cd "E:\QGIS Plugin\test_plugin"
    pyrcc5 -o resources.py resources.qrc

1行目で作成中のプラグインの保存先に移動して、2行目でpyrcc5コマンドを実行しています。

pyrcc5コマンドを実行するにはPathを設定しないといけません。こちらで紹介した設定を済ませていればパスは通っています。

環境変数QGIS_PLUGINPATHの設定

QGISが今作成したプラグインを探せるように、環境変数QGIS_PLUGINPATHを設定します。次のコードをPowerShellに張り付けて実行して下さい。

$old = [System.Environment]::GetEnvironmentVariable("QGIS_PLUGINPATH", "User")
$old += ";E:\QGIS Plugin"
[System.Environment]::SetEnvironmentVariable("QGIS_PLUGINPATH", $old, "User")

作成したプラグインを実行してみる

環境変数QGIS_PLUGINPATHの設定に問題無ければ、QGISを起動すれば先ほど作成したプラグインはメニューに表示されるはずですが、もし見当たらない場合は次の方法を試してください。

メニューに表示されていればこちらに進んでください。

プラグインを有効にする

f:id:Chiakikun:20180901145055p:plain

QGISに戻って、メニューの『プラグイン』→『プラグインの管理とインストール』を選択して下さい。

 

f:id:Chiakikun:20180901145401p:plain

f:id:Chiakikun:20180901145527p:plain

検索窓に先ほど作成したプラグインの名前を入力するとプラグインが見つかります。チェックして有効にして下さい。

 

プラグインを実行する

f:id:Chiakikun:20180901145600p:plain

作成したプラグインがメニューに登録されています。実行してみると...

 

f:id:Chiakikun:20180901145648p:plain

ウィンドウが表示されました。


Plugin Builderで作成した雛形に少し手を加える

Designerを実行する

f:id:Chiakikun:20180930154055p:plain

フォームに少し手を加えてみます。「Qt Designer」を起動します。スタートボタンを押して、検索窓に「designer」と入力すると、候補が出てきます。上の赤丸を選択してください。

 

UIファイルを開く

f:id:Chiakikun:20180930154233p:plain

先ほど作成したTest Pluginのフォームを選択します。メニューの「ファイル」→「開く」を選択すると、ファイル選択ダイアログが出るので、「E:\QGIS Plugin\testplugin\test_plugin_dialog_base.ui」を選択すると...

 

f:id:Chiakikun:20180930155003p:plain

Test Pluginのフォームが表示されました。

 

Line Editを貼り付けてみる

f:id:Chiakikun:20180930155429p:plain

Line Editを貼り付けます。貼り付けたらメニューの「ファイル」→「保存」を選択して、Designerを終了します。

 

プラグインに反映されているか確認する

f:id:Chiakikun:20180930162023p:plain

フォームの変更が反映されているか確認してみます。QGISを起動して、Test Pluginボタンをクリックします。Line Editが追加されたフォームが表示されましたでしょうか?

 

ソースコードを編集する

ソースに少し手を加えてみます。test_plugin.pyを編集します。33行目あたりに次のコードを追加します。

import qgis.core

さらに185行目あたりにあるrunメソッドの「if result:」と書かれたコードの下に次のコードを挿入します。lineEditに指定したシェープファイルを読み込むコードです。

            file = self.dlg.lineEdit.text()
            layer = qgis.core.QgsVectorLayer(file, u"サンプルレイヤ", "ogr")
            if layer.isValid():
                qgis.core.QgsProject.instance().addMapLayer(layer)

実行してみる

f:id:Chiakikun:20180930172524p:plain

QGISを起動して、Test Pluginを実行します。そしてLine Editに適当なシェープファイルのフルパスを指定してOKボタンをクリックします。指定したシェープファイルがQGISに読み込まれると思いますが、うまく表示されたでしょうか?

metadata.txtを編集後に「属性情報の読み取りエラー」でプラグインが使えなくなる場合

f:id:Chiakikun:20200211122252p:plain

f:id:Chiakikun:20200211122359p:plain

metadata.txtをメモ帳で編集して保存すると、そのプラグインが使えなくなってしまうことがあります。BOM付きUTF8で保存してしまっていることが原因なので、BOM無しで保存すればプラグインが使えるようになります。

 


2020/05/11追記

よく使う雛形

ダイアログ無し

nodialog_skelton.py

from qgis.PyQt.QtCore import QSettings
from qgis.PyQt.QtCore import QSettings
from qgis.PyQt.QtGui import QIcon
from qgis.PyQt.QtWidgets import QAction

# Initialize Qt resources from file resources.py
from .resources import *

import os.path
import qgis
from qgis.core import *
from qgis.gui  import *


class NodialogSkelton(QgsMapTool):

    def start(self):
        maptool = self # 場合によって書き換えて

        self.canvas.setMapTool(maptool)
        self.canvas.mapToolSet.connect(self.unsetTool) # このサンプル実行中に他のアイコンを押した場合


    def finish(self):
        self.canvas.mapToolSet.disconnect(self.unsetTool)


    def __init__(self, iface):
        self.plugin_name = 'ダイアログ無し雛形' # プラグイン名
        self.menu_pos    = '雛形'               # プラグインの登録場所(このサンプルの場合、メニューの「プラグイン/雛形/ダイアログ無し雛形」)
        self.toolbar     = True                 # Trueならツールバーにアイコンを表示する
        self.checkable   = True                 # Trueならプラグイン実行中はアイコンが凹んだままになる

        self.iface = iface
        self.canvas = self.iface.mapCanvas()

        QgsMapTool.__init__(self, self.canvas)


    # このプラグイン実行中に他のアイコンが押された場合、アイコンを元の状態に戻す
    def unsetTool(self, tool):
        if not isinstance(tool, NodialogSkelton):
            self.finish()
            self.action.setChecked(False)


    def initGui(self):
        icon = QIcon(os.path.dirname(__file__)+'/icon.png')
        self.action = QAction(icon, self.plugin_name, self.iface.mainWindow())
        self.action.triggered.connect(self.execSample) # アイコンを押下した時に実行されるメソッドを登録
        self.action.setCheckable(self.checkable)       # Trueだとアイコンを押下したら次に押下するまで凹んだままになる
        if self.toolbar:
            self.iface.addToolBarIcon(self.action)     # ツールバーにこのツールのアイコンを表示する
        self.iface.addPluginToMenu(self.menu_pos, self.action)
        

    # このプラグインを無効にしたときに呼ばれる
    def unload(self):
        self.iface.removePluginMenu(self.menu_pos, self.action)
        self.iface.removeToolBarIcon(self.action)


    # このツールのアイコンを押下したときに呼ばれる
    def execSample(self):
        if self.checkable:
            if self.action.isChecked(): # 凹状態になった
                self.previousMapTool = self.canvas.mapTool()  # 現在のマップツールを退避
                self.start()
            else:                       # 凸状態になった
                self.finish()
                self.canvas.setMapTool(self.previousMapTool)  # このツール実行前に戻す
        else:
            self.start()

ちょっとしたコードを書くときに使っている雛形です。Plugin Builderが出力するコードを参考にしました。別のページでこの雛形を使ったサンプルを作成しようと思います。インストール用zipはこちらに置いてあります。


最後までご覧頂き、ありがとうございました