ホーム » QGIS (ページ 4)

QGIS」カテゴリーアーカイブ

起動時にGUIをカスタマイズ

QGISの起動パラメータ–customizationfileと設定ファイルを渡すとGUIのカスタマイズが可能

設定ファイルのフォーマットは実際にQGISの設定メニューにあるインターフェイスのカスタマイズで確認が可能

QGISをsilent install

QGISのインストーラ(Windows)版はNSISで作成されているので引数に/S、/Dを指定してsilentインストールができる

Qt BottomDockWidgetAreaをCentral WidgetとRightDockWidgetAreaの下に配置

Central WidgetとRightDockWidgetAreaが配置されたQMainWindowにBottomDockWidgetAreaを追加すると
Central Widgetに下、もしくはRightDockWidgetAreaの下にBottomDockWidgetAreaに配置される。

BottomDockWidgetAreaをCentral WidgetとRightDockWidgetAreaの下に配置するにはBottomDockWidgetAreaを配置した後に
以下のコードを実行すればよい

[code]
mainWindow->setCorner(Qt::BottomLeftCorner, Qt::BottomDockWidgetArea);
mainWindow->setCorner(Qt::BottomRightCorner, Qt::BottomDockWidgetArea);
[/code]

QGIS3をWindows上でBUILD

参考サイト

更に正確なサイト

Compiling QGIS on Windows

セットアップ先

Windows10(Pro) 64bit

CMakeをインストール

cmake-3.13.0-win64-x64.zipをダウンロードしてC:\Program Files\cmakeにインストール

cygwinをインストール

cygwinをC:\cygwinにインストール

※デフォルトのインストール先はC:\cygwin64

cygwinよりflex(2.6.4-2)とBison(3.0.2-1)をインストール

Gitをインストール

GitのサイトよりGit-2.19.2-64-bit.exeをダウンロード後、C:\Gitにインストール

C:\Git\cmdにPATHを通す

Visual Studio 2015をインストール

Visual Studio 2015 Pro Update 3をインストールする

※Communityでも同じ?

Windows 10 SDK 10.0.14393.0 を必ず選択してインストール(package-nightly.cmdでWindows 10 SDK 10.0.14393.0のSetupAPI.Libを使用)

osgeo4wをインストール

osgeo4w-setup-x86_64.exeをダウンロード

起動後、アドバンスインストールを選択

Libs以下のqgis-dev-depsを選択

以下も選択

oci-devel
python3-gdal
python3-jinja2
python3-owslib
python3-psycopg2
python3-pygments

依存するモジュールもインストール

依存関係に対応するパッケージをインストールを選択

ninjaをインストール

https://github.com/ninja-build/ninja/releases/download/v1.7.1/ninja-win.zip

をダウンロード、展開してninja.exeをC:\OSGeo4W64\binにコピー。

QGISの最新ソースをダウンロード

CドライブにディレクトリPROJECTSを作成しカレントを移動し以下のコマンドでclone

[code]
git clone https://github.com/qgis/QGIS.git
[/code]

以下のディレクトリに展開

BUILD

環境変数のバッチを作成

以下のバッチをC:\OSGeo4W64\QGIS-Dev.batに保存

[code]
@echo off
set SOURCE=C:\Projects\QGIS
call "%SOURCE%\ms-windows\osgeo4w\msvc-env.bat" x86_64
@cmd
[/code]

C:\OSGeo4W64\QGIS-Dev.batをダブルクリックして実行すると環境設定を行いDOS画面が表示されるので カレントをC:\PROJECTS\QGIS\ms-windows\osgeo4wに移動し、configonly.batを実行。

DOS画面上でdevenvコマンドを実行してVisualStudioを起動し、C:\PROJECTS\QGIS\ms-windows\osgeo4w\build-qgis-test-x86_64\qgis.sinを開く。

ソリューションエクスプローラのALL_BUILDを選択して右クリックしビルドを実行。

コンパイル時に文字コードのエラーが発生した時はコンパイルオプションに/source-charset:utf-8を設定。

以下はqgis_coreの設定例

BUILDが終了したらALL_BUILDプロジェクトのデバッグ用のコマンドをC:\PROJECTS\QGIS\ms-windows\osgeo4w\build-qgis-test-x86_64\output\bin\RelWithDebInfo\qgis.exeに設定

F5キーでデバッグを実行

確認メッセージが表示されたらいいえを押す。

以上でQGIS起動

C:\PROJECTS\QGIS\ms-windows\osgeo4w\configonly.batは内部でpackage-nightly.cmdを呼んでいる。

package.cmdを呼ぶとリリース版のコンパイルか?

Shapeファイルを開く時にCRSを指定できませんでした

投影情報を持っていないShapeファイルを開くと投影を選択する画面が表示される

[code]
layer = QgsVectorLayer(‘c:\work\A27-16_13.shp’, ‘scool’, ‘ogr’)
[/code]

これを回避するためにQgsVectorLayerの最初の引数をuri形式にして同時にCRSを指定しようとしたが、

[code]
layer = QgsVectorLayer(‘file:///c:/work/A27-16_13.shp?crs=EPSG:4326’, ‘scool’, ‘ogr’)[code]
[/code]

エラーが発生したために一旦あきらめ

[code]
2018-11-27T11:31:35 WARNING Pythonのエラー : Pythonコードの実行中にエラーが発生しました: 詳細についてはメッセージログ(Pythonエラー)を参照して下さい.
[/code]

レイヤ情報を照会

アクティブなレイヤを照会
[code]
layer = self.iface.activeLayer()
[/code]

レイヤの種別
[code]
layer_type = layer.type()
if(layer_type == QgsMapLayer.VectorLayer):
[/code]

レイヤが編集可能か?
[code]
is_edit = layer.isEditable()
[/code]

一時的にレイヤ上にポイント追加

QGsMapToolのcanvasReleaseEventイベントで実行
[code]
def canvasReleaseEvent(self, e):
marker = QgsVertexMarker(self.canvas())
trans = self.canvas().getCoordinateTransform()
p = trans.toMapCoordinates(e.pos().x(), e.pos().y())
marker.setCenter(p)
marker.setColor(QColor(255, 0, 0))
marker.setIconType(QgsVertexMarker.ICON_CIRCLE)
marker.setIconSize(20)
marker.setPenWidth(5)
[/code]

marker.hide()で非表示
marker.show()で表示

レイヤにポイントを追加

[code]
layer = self.iface.activeLayer()
layer.startEditing()
feature = QgsFeature()
geom = QgsGeometry.fromPointXY(QgsPointXY(135,40))
feature.setGeometry(geom)
layer.addFeature(feature)
layer.commitChanges()
layer.updateExtents()
[/code]

layer.commitChanges()をしないと表示に反映されない?

メモリレイヤを追加

[code]
layer = QgsVectorLayer(‘Point?crs=epsg:4326’, ‘test_layer’, ‘memory’)
project = QgsProject.instance()
project.addMapLayer(layer)
[/code]
QgisInterfaceクラスのaddVectorLayerを使用してもよい

属性追加はlayer.addAttributeを使用

QGIS3のツールバーにボタンを追加

既存のプラグインツールバーにボタンを追加

今回はプラグインのinitGuideでツールバーにボタンを追加しボタンが押されたらメッセージボックスを表示

インポートを追加
[code]
from PyQt5.QtWidgets import QMessageBox, QAction
from PyQt5.QtGui import QIcon
[/code]

[code]
def initGui(self):
"""Create the menu entries and toolbar icons inside the QGIS GUI."""

testAction = QAction(QIcon(os.path.dirname(__file__) + ‘/niko.png’), ‘TEST’, self.iface.mainWindow())
testAction.triggered.connect(self.test)
self.iface.addToolBarIcon(testAction)

def test(self):
QMessageBox.about(self, "Title", "Message")
[/code]