修改了pairLayer的初始化函数以及project addlayer函数的接口,添加了影像通道

This commit is contained in:
石沈昊 2022-05-24 21:56:49 +08:00
parent 0a6ced74e5
commit 11ab42d497

View File

@ -12,7 +12,7 @@ import numpy as np
from osgeo import gdal, gdal_array
from rscder.utils.icons import IconInstance
from rscder.utils.setting import Settings
from qgis.core import QgsRasterLayer, QgsMarkerSymbol, QgsUnitTypes, QgsCategorizedSymbolRenderer, QgsRendererCategory, QgsPalLayerSettings, QgsRuleBasedLabeling, QgsTextFormat, QgsLineSymbol, QgsSingleSymbolRenderer, QgsSimpleLineSymbolLayer, QgsVectorLayer, QgsCoordinateReferenceSystem, QgsFeature, QgsGeometry, QgsPointXY
from qgis.core import QgsRasterLayer, QgsMarkerSymbol, QgsUnitTypes, QgsCategorizedSymbolRenderer, QgsRendererCategory, QgsPalLayerSettings, QgsRuleBasedLabeling, QgsTextFormat, QgsLineSymbol, QgsSingleSymbolRenderer, QgsSimpleLineSymbolLayer, QgsVectorLayer, QgsCoordinateReferenceSystem, QgsFeature, QgsGeometry, QgsPointXY,QgsMultiBandColorRenderer
from PyQt5.QtCore import QObject, pyqtSignal, Qt, QThread
from PyQt5.QtWidgets import QTreeWidgetItem, QAction
from PyQt5.QtGui import QColor, QIcon, QFont
@ -187,8 +187,8 @@ class Project(QObject):
os.makedirs(pth)
return pth
def add_layer(self, pth1, pth2):
player = PairLayer(pth1, pth2)
def add_layer(self, pth1, pth2,style_info1,style_info2):
player = PairLayer(pth1, pth2,style_info1,style_info2)
if player.check():
self.layers[player.id] = player
self.layer_show_update.emit()
@ -369,12 +369,13 @@ 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,style_info={'r':3,'g':2,'b':1,'NIR':3}):
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)
self.layer = QgsRasterLayer(self.path, self.name)
self.style_info=style_info
self.apply_style()
def compare(self, other:'RasterLayer'):
ds1 = gdal.Open(self.path)
ds2 = gdal.Open(other.path)
@ -414,7 +415,13 @@ class RasterLayer(BasicLayer):
s = (ds.RasterXSize, ds.RasterYSize)
del ds
return s
def apply_style(self):
renderer=QgsMultiBandColorRenderer(self.layer.dataProvider(),self.style_info['r'],self.style_info['g'],self.style_info['b'])
self.layer.setRenderer(renderer)
self.layer.triggerRepaint()
def set_stlye(self,style_info):
self.style_info=style_info
self.apply_style()
class VectorLayer(BasicLayer):
pass
@ -565,13 +572,13 @@ class ResultPointLayer(BasicLayer):
class PairLayer(BasicLayer):
def __init__(self, pth1, pth2) -> None:
def __init__(self, pth1, pth2,style_info1,style_info2) -> None:
self.layers:List[BasicLayer] = []
self.id = str(uuid.uuid1())
self.checked = False
self.main_l1 = RasterLayer(path = pth1, enable=True, view_mode=BasicLayer.LEFT_VIEW)
self.main_l2 = RasterLayer(path = pth2, enable=True, view_mode=BasicLayer.RIGHT_VIEW)
self.main_l1 = RasterLayer(path = pth1, enable=True, view_mode=BasicLayer.LEFT_VIEW,style_info=style_info1)
self.main_l2 = RasterLayer(path = pth2, enable=True, view_mode=BasicLayer.RIGHT_VIEW,style_info=style_info2)
self.main_l1.set_layer_parent(self)
self.main_l2.set_layer_parent(self)
self.grid = None