add layer select tool
This commit is contained in:
parent
0a6ced74e5
commit
3958b22a62
82
draw.drawio
Normal file
82
draw.drawio
Normal file
@ -0,0 +1,82 @@
|
||||
<mxfile host="65bd71144e">
|
||||
<diagram id="F3ajyJGEZ5hD2tpQ_zjz" name="第 1 页">
|
||||
<mxGraphModel dx="592" dy="380" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="4" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="2" target="3">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="2" value="256*256" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="60" width="120" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="3" target="5">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="25" style="edgeStyle=none;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="3" target="7">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="3" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="220" width="120" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="11" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="5" target="10">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="5" value="64*64" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="220" y="360" width="120" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="13" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="7" target="12">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="7" value="16*16" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="30" y="480" width="120" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="15" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="10" target="14">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="10" value="16*16" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="220" y="480" width="120" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="21" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="12" target="20">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="12" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="30" y="620" width="120" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="17" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="14" target="16">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="14" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="220" y="620" width="120" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="19" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="16" target="18">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="16" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="220" y="760" width="120" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="24" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="18" target="23">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="18" value="k 16*16" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="220" y="900" width="120" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="22" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="20" target="18">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="20" value="16*16" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="30" y="770" width="120" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="23" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="220" y="1040" width="120" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="26" value="8" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="380" width="20" height="20" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="27" value="8*16" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="280" y="430" width="40" height="20" as="geometry"/>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
8
log.txt
8
log.txt
@ -1,4 +1,4 @@
|
||||
2022-05-23 21:09:46,286 - root - INFO - lic data:2022-12-01 00:00:00
|
||||
2022-05-23 21:09:46,286 - root - INFO - remain_days: 191
|
||||
2022-05-23 21:09:47,553 - root - INFO - lic data:2022-12-01 00:00:00
|
||||
2022-05-23 21:09:47,553 - root - INFO - remain_days: 191
|
||||
2022-05-24 20:29:01,454 - root - INFO - lic data:2022-12-01 00:00:00
|
||||
2022-05-24 20:29:01,455 - root - INFO - remain_days: 190
|
||||
2022-05-24 20:29:02,777 - root - INFO - lic data:2022-12-01 00:00:00
|
||||
2022-05-24 20:29:02,777 - root - INFO - remain_days: 190
|
||||
|
@ -6,7 +6,7 @@ from PyQt5.QtWidgets import QAction, QDialog, QHBoxLayout, QVBoxLayout, QPushBut
|
||||
from PyQt5.QtCore import pyqtSignal
|
||||
from PyQt5.QtGui import QIcon
|
||||
from rscder.utils.project import BasicLayer, Project, PairLayer, ResultPointLayer, RasterLayer
|
||||
from rscder.gui.layercombox import LayerCombox
|
||||
from rscder.gui.layercombox import PairLayerCombox
|
||||
from osgeo import gdal, gdal_array
|
||||
from threading import Thread
|
||||
import numpy as np
|
||||
@ -21,7 +21,7 @@ class MyDialog(QDialog):
|
||||
|
||||
self.setFixedWidth(500)
|
||||
|
||||
self.layer_select = LayerCombox(self)
|
||||
self.layer_select = PairLayerCombox(self)
|
||||
self.layer_select.setFixedWidth(400)
|
||||
|
||||
# self.number_input = QLineEdit(self)
|
||||
@ -45,6 +45,9 @@ class MyDialog(QDialog):
|
||||
self.setLayout(self.main_layout)
|
||||
|
||||
def on_ok(self):
|
||||
if self.layer_select.layer1 is None or self.layer_select.layer2 is None:
|
||||
self.reject()
|
||||
return
|
||||
self.accept()
|
||||
|
||||
def on_cancel(self):
|
||||
@ -86,17 +89,22 @@ class BasicMethod(BasicPlugin):
|
||||
def send_message(self, s):
|
||||
self.message_box.info(s)
|
||||
|
||||
def run_basic_diff_alg(self, layer:PairLayer):
|
||||
def run_basic_diff_alg(self, layer1:RasterLayer, layer2:RasterLayer):
|
||||
|
||||
pth1 = layer.main_l1.path
|
||||
pth2 = layer.main_l2.path
|
||||
pth1 = layer1.path
|
||||
pth2 = layer2.path
|
||||
|
||||
cell_size = layer.cell_size
|
||||
|
||||
|
||||
cell_size = layer1.layer_parent.cell_size
|
||||
|
||||
self.message_send.emit('开始计算差分法')
|
||||
|
||||
ds1 = gdal.Open(pth1)
|
||||
ds2 = gdal.Open(pth2)
|
||||
if not layer1.compare(layer2):
|
||||
self.message_send.emit('两个图层的尺寸不同')
|
||||
return
|
||||
xsize = ds1.RasterXSize
|
||||
ysize = ds1.RasterYSize
|
||||
band = ds1.RasterCount
|
||||
@ -142,7 +150,7 @@ class BasicMethod(BasicPlugin):
|
||||
self.message_send.emit('归一化概率中...')
|
||||
temp_in_ds = gdal.Open(out_tif)
|
||||
|
||||
out_normal_tif = os.path.join(Project().cmi_path, '{}-{}.tif'.format(layer.name, int(np.random.rand() * 100000)))
|
||||
out_normal_tif = os.path.join(Project().cmi_path, '{}-{}.tif'.format(layer1.layer_parent.name, int(np.random.rand() * 100000)))
|
||||
out_normal_ds = driver.Create(out_normal_tif, xsize, ysize, 1, gdal.GDT_Byte)
|
||||
out_normal_ds.SetGeoTransform(ds1.GetGeoTransform())
|
||||
out_normal_ds.SetProjection(ds1.GetProjection())
|
||||
@ -175,7 +183,7 @@ class BasicMethod(BasicPlugin):
|
||||
self.message_send.emit('完成归一化概率')
|
||||
|
||||
self.message_send.emit('计算变化表格中...')
|
||||
out_csv = os.path.join(Project().bcdm_path, '{}-{}.csv'.format(layer.name, int(np.random.rand() * 100000)))
|
||||
out_csv = os.path.join(Project().bcdm_path, '{}-{}.csv'.format(layer1.layer_parent.name, int(np.random.rand() * 100000)))
|
||||
xblocks = xsize // cell_size[0]
|
||||
|
||||
normal_in_ds = gdal.Open(out_normal_tif)
|
||||
@ -202,11 +210,11 @@ class BasicMethod(BasicPlugin):
|
||||
f.write(f'{center_x},{center_y},{block_data_xy.mean() / 255 * 100},1\n')
|
||||
|
||||
|
||||
point_result_lalyer = ResultPointLayer(out_csv, enable=False, proj = layer.proj, geo = layer.geo)
|
||||
point_result_lalyer = ResultPointLayer(out_csv, enable=False, proj = layer1.proj, geo = layer1.geo)
|
||||
raster_result_layer = RasterLayer(None, True, out_normal_tif, BasicLayer.BOATH_VIEW)
|
||||
|
||||
layer.add_result_layer(point_result_lalyer)
|
||||
layer.add_result_layer(raster_result_layer)
|
||||
layer1.layer_parent.add_result_layer(point_result_lalyer)
|
||||
layer1.layer_parent.add_result_layer(raster_result_layer)
|
||||
|
||||
self.message_send.emit('完成计算变化表格')
|
||||
|
||||
@ -214,18 +222,18 @@ class BasicMethod(BasicPlugin):
|
||||
|
||||
def basic_diff_alg(self):
|
||||
# layer_select =
|
||||
layer = None
|
||||
|
||||
layer_select = MyDialog(self.mainwindow)
|
||||
if(layer_select.exec_()):
|
||||
layer = layer_select.layer_select.current_layer
|
||||
if layer_select.exec_():
|
||||
layer1 = layer_select.layer_select.layer1
|
||||
layer2 = layer_select.layer_select.layer2
|
||||
else:
|
||||
return
|
||||
# layer:PairLayer = list(self.project.layers.values())[0]
|
||||
|
||||
if not layer.check():
|
||||
return
|
||||
|
||||
|
||||
t = Thread(target=self.run_basic_diff_alg, args=(layer,))
|
||||
t = Thread(target=self.run_basic_diff_alg, args=(layer1, layer2))
|
||||
t.start()
|
||||
|
||||
|
||||
|
@ -18,4 +18,11 @@
|
||||
module: export_to
|
||||
name: ExportTo
|
||||
path: ./plugin\export_to
|
||||
version: 1.0.0
|
||||
- author: RSCDER
|
||||
description: MeanFilter
|
||||
enabled: true
|
||||
module: some_filter
|
||||
name: MeanFilter
|
||||
path: ./plugin\some_filter
|
||||
version: 1.0.0
|
1
plugins/some_filter/__init__.py
Normal file
1
plugins/some_filter/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
from some_filter.main import *
|
135
plugins/some_filter/main.py
Normal file
135
plugins/some_filter/main.py
Normal file
@ -0,0 +1,135 @@
|
||||
import os
|
||||
from threading import Thread
|
||||
from PyQt5.QtWidgets import QDialog, QAction
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
from PyQt5.QtCore import Qt, QModelIndex, pyqtSignal
|
||||
from rscder.utils.project import PairLayer, Project, RasterLayer, ResultPointLayer
|
||||
from rscder.plugins.basic import BasicPlugin
|
||||
from rscder.gui.layercombox import RasterLayerCombox
|
||||
from osgeo import gdal, gdal_array
|
||||
from skimage.filters import rank
|
||||
from skimage.morphology import disk, rectangle
|
||||
class FilterSetting(QDialog):
|
||||
def __init__(self, parent=None):
|
||||
super(FilterSetting, self).__init__(parent)
|
||||
self.setWindowTitle('Filter Setting')
|
||||
# self.setWindowFlags(Qt.WindowStaysOnTopHint)
|
||||
self.setFixedSize(300, 200)
|
||||
# self.setStyleSheet("QDialog{background-color:rgb(255,255,255);}")
|
||||
self.setWindowIcon(QtGui.QIcon(':/plugins/some_filter/icon.png'))
|
||||
self.setWindowIconText('Filter Setting')
|
||||
# self.setWindowModality(Qt.ApplicationModal)
|
||||
self.initUI()
|
||||
# self.show()
|
||||
|
||||
def initUI(self):
|
||||
self.layer_combox = RasterLayerCombox(self)
|
||||
layer_label = QtWidgets.QLabel('图层:')
|
||||
|
||||
hbox = QtWidgets.QHBoxLayout()
|
||||
hbox.addWidget(layer_label)
|
||||
hbox.addWidget(self.layer_combox)
|
||||
|
||||
x_size_input = QtWidgets.QLineEdit(self)
|
||||
x_size_input.setText('3')
|
||||
y_size_input = QtWidgets.QLineEdit(self)
|
||||
y_size_input.setText('3')
|
||||
|
||||
size_label = QtWidgets.QLabel(self)
|
||||
size_label.setText('窗口大小:')
|
||||
|
||||
time_label = QtWidgets.QLabel(self)
|
||||
time_label.setText('X')
|
||||
|
||||
self.x_size_input = x_size_input
|
||||
self.y_size_input = y_size_input
|
||||
|
||||
hlayout1 = QtWidgets.QHBoxLayout()
|
||||
hlayout1.addWidget(size_label)
|
||||
hlayout1.addWidget(x_size_input)
|
||||
hlayout1.addWidget(time_label)
|
||||
hlayout1.addWidget(y_size_input)
|
||||
|
||||
ok_button = QtWidgets.QPushButton(self)
|
||||
ok_button.setText('确定')
|
||||
ok_button.clicked.connect(self.accept)
|
||||
|
||||
cancel_button = QtWidgets.QPushButton(self)
|
||||
cancel_button.setText('取消')
|
||||
cancel_button.clicked.connect(self.reject)
|
||||
|
||||
hlayout2 = QtWidgets.QHBoxLayout()
|
||||
hlayout2.addWidget(ok_button)
|
||||
hlayout2.addWidget(cancel_button)
|
||||
|
||||
vlayout = QtWidgets.QVBoxLayout()
|
||||
vlayout.addLayout(hbox)
|
||||
vlayout.addLayout(hlayout1)
|
||||
vlayout.addLayout(hlayout2)
|
||||
self.setLayout(vlayout)
|
||||
|
||||
|
||||
class MainPlugin(BasicPlugin):
|
||||
|
||||
alg_ok = pyqtSignal(PairLayer, RasterLayer)
|
||||
|
||||
@staticmethod
|
||||
def info():
|
||||
return {
|
||||
'name': 'mean_filter',
|
||||
'author': 'rscder',
|
||||
'version': '0.0.1',
|
||||
'description': 'Mean Filter'
|
||||
}
|
||||
|
||||
def set_action(self):
|
||||
self.action = QAction('均值滤波', self.mainwindow)
|
||||
# self.action.setCheckable)
|
||||
# self.action.setChecked(False)
|
||||
self.action.triggered.connect(self.run)
|
||||
self.ctx['basic_menu'].addAction(self.action)
|
||||
self.alg_ok.connect(self.alg_oked)
|
||||
# basic
|
||||
|
||||
def alg_oked(self, parent, layer:RasterLayer):
|
||||
parent.add_result_layer(layer)
|
||||
|
||||
def run_alg(self, layer:RasterLayer, x_size, y_size, method='mean'):
|
||||
x_size = int(x_size)
|
||||
y_size = int(y_size)
|
||||
pth = layer.path
|
||||
if pth is None:
|
||||
return
|
||||
|
||||
ds = gdal.Open(pth)
|
||||
band_count = ds.RasterCount
|
||||
out_path = os.path.join(Project().other_path, '{}_mean_filter.tif'.format(layer.name))
|
||||
out_ds = gdal.GetDriverByName('GTiff').Create(out_path, ds.RasterXSize, ds.RasterYSize, band_count, ds.GetRasterBand(1).DataType)
|
||||
out_ds.SetProjection(ds.GetProjection())
|
||||
out_ds.SetGeoTransform(ds.GetGeoTransform())
|
||||
|
||||
for i in range(band_count):
|
||||
band = ds.GetRasterBand(i+1)
|
||||
data = band.ReadAsArray()
|
||||
|
||||
data = rank.mean(data, rectangle(y_size, x_size))
|
||||
|
||||
out_band = out_ds.GetRasterBand(i+1)
|
||||
out_band.WriteArray(data)
|
||||
|
||||
out_ds.FlushCache()
|
||||
del out_ds
|
||||
del ds
|
||||
|
||||
rlayer = RasterLayer(path = out_path, enable= True, view_mode = layer.view_mode )
|
||||
|
||||
self.alg_ok.emit(layer.layer_parent, rlayer)
|
||||
|
||||
def run(self):
|
||||
dialog = FilterSetting(self.mainwindow)
|
||||
dialog.show()
|
||||
if dialog.exec_():
|
||||
x_size = int(dialog.x_size_input.text())
|
||||
y_size = int(dialog.y_size_input.text())
|
||||
t = Thread(target=self.run_alg, args=(dialog.layer_combox.current_layer, x_size, y_size))
|
||||
t.start()
|
@ -1,6 +1,6 @@
|
||||
from PyQt5.QtWidgets import QComboBox
|
||||
from PyQt5.QtWidgets import QComboBox, QWidget, QLabel, QHBoxLayout, QVBoxLayout
|
||||
from PyQt5.QtGui import QIcon
|
||||
from rscder.utils.project import Project
|
||||
from rscder.utils.project import Project, RasterLayer, ResultPointLayer
|
||||
class LayerCombox(QComboBox):
|
||||
|
||||
def __init__(self, parent=None):
|
||||
@ -23,4 +23,117 @@ class LayerCombox(QComboBox):
|
||||
self.current_layer = None
|
||||
else:
|
||||
self.current_layer = Project().layers[self.itemData(index)]
|
||||
|
||||
class PairLayerCombox(QWidget):
|
||||
|
||||
def __init__(self, parent=None) -> None:
|
||||
super().__init__(parent)
|
||||
self.layer1 = None
|
||||
self.layer2 = None
|
||||
self.initUI()
|
||||
|
||||
def initUI(self):
|
||||
self.layer_combox = LayerCombox(self)
|
||||
layer_label = QLabel('图层组:')
|
||||
|
||||
hbox = QHBoxLayout()
|
||||
hbox.addWidget(layer_label)
|
||||
hbox.addWidget(self.layer_combox)
|
||||
|
||||
self.raster_layer1 = QComboBox(self)
|
||||
self.raster_layer1.addItem('---', None)
|
||||
|
||||
self.raster_layer2 = QComboBox(self)
|
||||
self.raster_layer2.addItem('---', None)
|
||||
|
||||
self.raster_layer1.currentIndexChanged.connect(self.on_raster_layer1_changed)
|
||||
self.raster_layer2.currentIndexChanged.connect(self.on_raster_layer2_changed)
|
||||
|
||||
self.layer_combox.currentIndexChanged.connect(self.on_group_changed)
|
||||
|
||||
self.setLayout(hbox)
|
||||
|
||||
def on_raster_layer1_changed(self, index):
|
||||
if index == 0:
|
||||
self.layer1 = None
|
||||
else:
|
||||
self.layer1 = self.raster_layer1.itemData(index)
|
||||
|
||||
def on_raster_layer2_changed(self, index):
|
||||
if index == 0:
|
||||
self.layer2 = None
|
||||
else:
|
||||
self.layer2 = self.raster_layer2.itemData(index)
|
||||
|
||||
def on_group_changed(self, index):
|
||||
if index == 0:
|
||||
self.raster_layer1.clear()
|
||||
self.raster_layer2.clear()
|
||||
self.raster_layer1.addItem('---', None)
|
||||
self.raster_layer2.addItem('---', None)
|
||||
else:
|
||||
self.raster_layer1.clear()
|
||||
self.raster_layer2.clear()
|
||||
self.raster_layer1.addItem('---', None)
|
||||
self.raster_layer2.addItem('---', None)
|
||||
for sub in self.layer_combox.current_layer.layers:
|
||||
if isinstance(sub, RasterLayer):
|
||||
self.raster_layer1.addItem(QIcon(':/icons/layer.png'), sub.name, sub)
|
||||
self.raster_layer2.addItem(QIcon(':/icons/layer.png'), sub.name, sub)
|
||||
|
||||
|
||||
class RasterLayerCombox(QComboBox):
|
||||
|
||||
def __init__(self, parent=None, layer=None):
|
||||
super().__init__(parent)
|
||||
self.addItem('---', None)
|
||||
if layer is not None:
|
||||
for sub in layer.layers:
|
||||
if isinstance(sub, RasterLayer):
|
||||
self.addItem(sub.name, sub)
|
||||
else:
|
||||
for layer in Project().layers.values():
|
||||
for sub in layer.layers:
|
||||
if isinstance(sub, RasterLayer):
|
||||
self.addItem(sub.name, sub)
|
||||
# self.addItem(layer.name, layer.id)
|
||||
|
||||
for i in range(self.count() - 1):
|
||||
self.setItemIcon(i + 1, QIcon(':/icons/layer.png'))
|
||||
|
||||
|
||||
self.currentIndexChanged.connect(self.on_changed)
|
||||
|
||||
self.current_layer = None
|
||||
|
||||
def on_changed(self, index):
|
||||
if index == 0:
|
||||
self.current_layer = None
|
||||
else:
|
||||
self.current_layer = self.itemData(index)
|
||||
|
||||
class ResultPointLayerCombox(QComboBox):
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self.addItem('---', None)
|
||||
|
||||
for layer in Project().layers.values():
|
||||
for sub in layer.layers:
|
||||
if isinstance(sub, ResultPointLayer):
|
||||
self.addItem(sub.name, sub)
|
||||
|
||||
for i in range(self.count() - 1):
|
||||
self.setItemIcon(i + 1, QIcon(':/icons/layer.png'))
|
||||
|
||||
|
||||
self.currentIndexChanged.connect(self.on_changed)
|
||||
|
||||
self.current_layer = None
|
||||
|
||||
def on_changed(self, index):
|
||||
if index == 0:
|
||||
self.current_layer = None
|
||||
else:
|
||||
self.current_layer = self.itemData(index)
|
||||
|
||||
|
@ -124,32 +124,6 @@ class DoubleCanvas(QWidget):
|
||||
self.mapcanva1.setLayers(layer_list_1)
|
||||
self.mapcanva2.setLayers(layer_list_2)
|
||||
|
||||
def add_layer(self, layer:str):
|
||||
if not layer in Project().layers:
|
||||
self.clear()
|
||||
return
|
||||
layer:PairLayer = Project().layers[layer]
|
||||
if not layer.enable:
|
||||
return
|
||||
# self.clear()
|
||||
|
||||
if not self.mapcanva1.is_main and not self.mapcanva2.is_main:
|
||||
self.mapcanva1.is_main = True
|
||||
|
||||
if layer.l1_enable:
|
||||
self.mapcanva1.add_layer(layer.l1)
|
||||
if layer.l2_enable:
|
||||
self.mapcanva2.add_layer(layer.l2)
|
||||
if layer.grid_enable and self.grid_show:
|
||||
self.mapcanva1.add_grid_layer(layer.grid_layer.grid_layer)
|
||||
self.mapcanva2.add_grid_layer(layer.grid_layer.grid_layer)
|
||||
for r in layer.results:
|
||||
if r.enable:
|
||||
self.mapcanva1.add_layer(r.layer)
|
||||
self.mapcanva2.add_layer(r.layer)
|
||||
# self.mapcanva1.set_extent(layer.l1.extent())
|
||||
self.mapcanva1.refresh()
|
||||
self.mapcanva2.refresh()
|
||||
|
||||
def zoom_to_extent(self, extent):
|
||||
# extent = QgsRectangle(x - layer.cell_size[0] * layer.xres, y - layer.cell_size[1] * layer.yres, x + layer.cell_size[0] * layer.xres, y + layer.cell_size[1] * layer.yres)
|
||||
@ -159,8 +133,6 @@ class DoubleCanvas(QWidget):
|
||||
def zoom_to_layer(self, layer):
|
||||
self.mapcanva1.set_extent(layer.extent())
|
||||
self.mapcanva2.set_extent(layer.extent())
|
||||
def layer_changed(self, layer:str):
|
||||
self.add_layer(layer)
|
||||
|
||||
def clear(self):
|
||||
self.mapcanva1.clear()
|
||||
|
@ -369,7 +369,8 @@ class GridLayer(BasicLayer):
|
||||
|
||||
class RasterLayer(BasicLayer):
|
||||
|
||||
def __init__(self, name=None, enable=False, path=None, view_mode=BasicLayer.BOATH_VIEW):
|
||||
def __init__(self, name=None, enable=False, path=None,
|
||||
view_mode=BasicLayer.BOATH_VIEW):
|
||||
if name is None:
|
||||
name = os.path.splitext(os.path.basename(path))[0]
|
||||
super().__init__(name, enable, ':/icons/raster.png', path, BasicLayer.IN_FILE, view_mode)
|
||||
|
@ -162,17 +162,4 @@ class Settings(QSettings):
|
||||
value = value is not None
|
||||
with Settings(Settings.General.PRE) as s:
|
||||
s.setValue('auto_save', value)
|
||||
|
||||
@property
|
||||
def auto_save_intervel(self):
|
||||
with Settings(Settings.General.PRE) as s:
|
||||
return s.value('auto_save_intervel', 30)
|
||||
|
||||
@auto_save_intervel.setter
|
||||
def auto_save_intervel(self, value):
|
||||
if isinstance(value, int) and value > 0:
|
||||
pass
|
||||
else:
|
||||
return
|
||||
with Settings(Settings.General.PRE) as s:
|
||||
s.setValue('auto_save_intervel', value)
|
||||
|
Loading…
x
Reference in New Issue
Block a user