-
Notifications
You must be signed in to change notification settings - Fork 0
/
dem_to_csmap.py
92 lines (77 loc) · 3.21 KB
/
dem_to_csmap.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import multiprocessing
import os
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QDialog
from qgis.core import Qgis, QgsProject, QgsRasterLayer
from qgis.gui import QgsFileWidget
from qgis.PyQt import uic
from qgis.utils import iface
from csmap_py.csmap import process
class DemToCsMap(QDialog):
def __init__(self):
super().__init__()
self.ui = uic.loadUi(
os.path.join(os.path.dirname(__file__), "dem_to_csmap.ui"), self
)
# ウィンドウを常に全面に表示する
self.setWindowFlags(Qt.WindowStaysOnTopHint)
# 入力データの制限
self.ui.mQgsFileWidget_input.setFilter("*")
# 出力データの設定
self.ui.mQgsFileWidget_output.setFilter("*.tif")
self.ui.mQgsFileWidget_output.setStorageMode(QgsFileWidget.StorageMode.SaveFile)
# デフォルトの max_workers の値をCPUの最大スレッド数に設定
self.ui.spinBoxMaxWorkers.setValue(multiprocessing.cpu_count())
# ボタンのクリックイベント
self.ui.pushButton_run.clicked.connect(self.convert_dem_to_csmap)
self.ui.pushButton_cancel.clicked.connect(self.close)
def convert_dem_to_csmap(self):
# パラメータの設定
params = process.CsmapParams(
gf_size=self.ui.spinBoxGfSize.value(),
gf_sigma=self.ui.spinBoxGfSigma.value(),
curvature_size=self.ui.spinBoxCurvatureSize.value(),
height_scale=(
self.ui.spinBoxHeightScaleMin.value(),
self.ui.spinBoxHeightScaleMax.value(),
),
slope_scale=(
self.ui.doubleSpinBoxSlopeScaleMin.value(),
self.ui.doubleSpinBoxSlopeScaleMax.value(),
),
curvature_scale=(
self.ui.doubleSpinBoxCurvatureScaleMin.value(),
self.ui.doubleSpinBoxCurvatureScaleMax.value(),
), # 曲率
)
# 入力・出力をUIで操作
input_path = self.ui.mQgsFileWidget_input.filePath()
output_path = self.ui.mQgsFileWidget_output.filePath()
try:
process.process(
input_path,
output_path,
chunk_size=self.ui.spinBoxChunkSize.value(),
params=params,
max_workers=self.ui.spinBoxMaxWorkers.value(),
)
except Exception as e:
iface.messageBar().pushMessage(
"CSMap Plugin",
f"DEMデータの処理中に問題が発生しました: {e}",
level=Qgis.Critical,
)
return
# 出力結果をQGISに追加・マップキャンバスの中心に表示
rlayer = QgsRasterLayer(output_path, os.path.basename(output_path))
QgsProject.instance().addMapLayer(rlayer)
iface.setActiveLayer(rlayer)
iface.zoomToActiveLayer()
iface.messageBar().pushMessage(
"CSMap Plugin",
f"変換が完了しました: {output_path}",
level=Qgis.Info,
)
# 処理終了後にウィンドウを閉じるオプション
if self.ui.checkBox_closeAfterProcessing.isChecked():
self.close()