fix lamdba bug; change to partial
This commit is contained in:
parent
3a252ce77f
commit
ad140f479c
@ -1,3 +1,4 @@
|
||||
from functools import partial
|
||||
from threading import Thread
|
||||
from rscder.plugins.basic import BasicPlugin
|
||||
from rscder.utils.icons import IconInstance
|
||||
@ -65,7 +66,8 @@ class FollowPlugin(BasicPlugin):
|
||||
combox.addItem(name, key)
|
||||
|
||||
action = QtWidgets.QAction(alg.get_icon(), name, self.mainwindow)
|
||||
action.triggered.connect(lambda : self.run_dialog(alg))
|
||||
func = partial(self.run_dialog, alg)
|
||||
action.triggered.connect(func)
|
||||
toolbar.addAction(action)
|
||||
|
||||
|
||||
@ -138,7 +140,7 @@ class FollowPlugin(BasicPlugin):
|
||||
|
||||
params = alg.get_params(dialog.widget)
|
||||
|
||||
t = Thread(target=self.run_alg, args = (params,))
|
||||
t = Thread(target=self.run_alg, args = (alg, params,))
|
||||
t.start()
|
||||
|
||||
|
||||
|
@ -33,6 +33,13 @@
|
||||
name: UnsupervisedPlugin
|
||||
path: ./plugin\unsupervsied_method
|
||||
version: 1.0.0
|
||||
- author: RSCDER
|
||||
description: VegatationPlugin
|
||||
enabled: true
|
||||
module: veg_method
|
||||
name: VegatationPlugin
|
||||
path: ./plugin\veg_method
|
||||
version: 1.0.0
|
||||
- author: RSCDER
|
||||
description: set Change Rate
|
||||
enabled: true
|
||||
|
@ -1,3 +1,4 @@
|
||||
from functools import partial
|
||||
from threading import Thread
|
||||
from plugins.misc.main import AlgFrontend
|
||||
from rscder.gui.actions import ActionManager
|
||||
@ -152,8 +153,6 @@ class UnsupervisedCDFollow(AlgFrontend):
|
||||
|
||||
|
||||
cdpth = cdalg.run_alg(pth1, pth2, layer1.layer_parent, send_message= send_message,**cdparams)
|
||||
|
||||
|
||||
thpth = thalg.run_alg(cdpth, name=name, send_message= send_message, **thparams)
|
||||
|
||||
table_layer(thpth,layer1,name, send_message)
|
||||
@ -186,12 +185,14 @@ class UnsupervisedPlugin(BasicPlugin):
|
||||
name = alg.get_name()
|
||||
|
||||
action = QAction(name, unsupervised_menu)
|
||||
action.triggered.connect(lambda : self.run_cd(alg))
|
||||
func = partial(self.run_cd, alg)
|
||||
action.triggered.connect(func)
|
||||
|
||||
unsupervised_menu.addAction(action)
|
||||
|
||||
|
||||
def run_cd(self, alg):
|
||||
print(alg.get_name())
|
||||
dialog = UnsupervisedCDMethod(self.mainwindow, alg)
|
||||
dialog.show()
|
||||
|
||||
@ -208,7 +209,7 @@ class UnsupervisedPlugin(BasicPlugin):
|
||||
|
||||
falg, fparams = w.filter_select.get_alg_and_params()
|
||||
cdalg = w.alg
|
||||
cdparams = w.alg.get_params()
|
||||
cdparams = w.alg.get_params(w.param_widget)
|
||||
thalg, thparams = w.thres_select.get_alg_and_params()
|
||||
|
||||
if cdalg is None or thalg is None:
|
||||
|
1
plugins/veg_method/__init__.py
Normal file
1
plugins/veg_method/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
from veg_method.main import *
|
226
plugins/veg_method/main.py
Normal file
226
plugins/veg_method/main.py
Normal file
@ -0,0 +1,226 @@
|
||||
from functools import partial
|
||||
from threading import Thread
|
||||
from plugins.misc.main import AlgFrontend
|
||||
from rscder.gui.actions import ActionManager
|
||||
from rscder.plugins.basic import BasicPlugin
|
||||
from PyQt5.QtWidgets import QAction, QToolBar, QMenu, QDialog, QHBoxLayout, QVBoxLayout, QPushButton,QWidget,QLabel,QLineEdit,QPushButton,QComboBox,QDialogButtonBox
|
||||
|
||||
from rscder.gui.layercombox import PairLayerCombox
|
||||
from rscder.utils.icons import IconInstance
|
||||
from filter_collection import FILTER
|
||||
from .scripts import VEG_CD
|
||||
from thres import THRES
|
||||
from misc import table_layer, AlgSelectWidget
|
||||
from follow import FOLLOW
|
||||
|
||||
class VegtationCDMethod(QDialog):
|
||||
def __init__(self,parent=None, alg:AlgFrontend=None):
|
||||
super(VegtationCDMethod, self).__init__(parent)
|
||||
self.alg = alg
|
||||
self.setWindowTitle('植被变化检测:{}'.format(alg.get_name()))
|
||||
self.setWindowIcon(IconInstance().LOGO)
|
||||
self.initUI()
|
||||
self.setMinimumWidth(500)
|
||||
|
||||
def initUI(self):
|
||||
#图层
|
||||
self.layer_combox = PairLayerCombox(self)
|
||||
layerbox = QHBoxLayout()
|
||||
layerbox.addWidget(self.layer_combox)
|
||||
|
||||
self.filter_select = AlgSelectWidget(self, FILTER)
|
||||
self.param_widget = self.alg.get_widget(self)
|
||||
self.unsupervised_menu = self.param_widget
|
||||
self.thres_select = AlgSelectWidget(self, THRES)
|
||||
|
||||
self.ok_button = QPushButton('确定', self)
|
||||
self.ok_button.setIcon(IconInstance().OK)
|
||||
self.ok_button.clicked.connect(self.accept)
|
||||
self.ok_button.setDefault(True)
|
||||
|
||||
self.cancel_button = QPushButton('取消', self)
|
||||
self.cancel_button.setIcon(IconInstance().CANCEL)
|
||||
self.cancel_button.clicked.connect(self.reject)
|
||||
self.cancel_button.setDefault(False)
|
||||
buttonbox=QDialogButtonBox(self)
|
||||
buttonbox.addButton(self.ok_button,QDialogButtonBox.NoRole)
|
||||
buttonbox.addButton(self.cancel_button,QDialogButtonBox.NoRole)
|
||||
buttonbox.setCenterButtons(True)
|
||||
|
||||
totalvlayout=QVBoxLayout()
|
||||
totalvlayout.addLayout(layerbox)
|
||||
totalvlayout.addWidget(self.filter_select)
|
||||
if self.param_widget is not None:
|
||||
totalvlayout.addWidget(self.param_widget)
|
||||
totalvlayout.addWidget(self.thres_select)
|
||||
totalvlayout.addStretch(1)
|
||||
hbox = QHBoxLayout()
|
||||
hbox.addStretch(1)
|
||||
hbox.addWidget(buttonbox)
|
||||
totalvlayout.addLayout(hbox)
|
||||
# totalvlayout.addStretch()
|
||||
|
||||
self.setLayout(totalvlayout)
|
||||
|
||||
@FOLLOW.register
|
||||
class VegetationCDFollow(AlgFrontend):
|
||||
|
||||
@staticmethod
|
||||
def get_name():
|
||||
return '植被变化检测'
|
||||
|
||||
@staticmethod
|
||||
def get_icon():
|
||||
return IconInstance().UNSUPERVISED
|
||||
|
||||
@staticmethod
|
||||
def get_widget(parent=None):
|
||||
widget = QWidget(parent)
|
||||
layer_combox = PairLayerCombox(widget)
|
||||
layer_combox.setObjectName('layer_combox')
|
||||
|
||||
filter_select = AlgSelectWidget(widget, FILTER)
|
||||
filter_select.setObjectName('filter_select')
|
||||
unsupervised_select = AlgSelectWidget(widget, VEG_CD)
|
||||
unsupervised_select.setObjectName('unsupervised_select')
|
||||
thres_select = AlgSelectWidget(widget, THRES)
|
||||
thres_select.setObjectName('thres_select')
|
||||
|
||||
totalvlayout=QVBoxLayout()
|
||||
totalvlayout.addWidget(layer_combox)
|
||||
totalvlayout.addWidget(filter_select)
|
||||
totalvlayout.addWidget(unsupervised_select)
|
||||
totalvlayout.addWidget(thres_select)
|
||||
totalvlayout.addStretch()
|
||||
|
||||
widget.setLayout(totalvlayout)
|
||||
|
||||
return widget
|
||||
|
||||
@staticmethod
|
||||
def get_params(widget:QWidget=None):
|
||||
if widget is None:
|
||||
return dict()
|
||||
|
||||
layer_combox = widget.findChild(PairLayerCombox, 'layer_combox')
|
||||
filter_select = widget.findChild(AlgSelectWidget, 'filter_select')
|
||||
unsupervised_select = widget.findChild(AlgSelectWidget, 'unsupervised_select')
|
||||
thres_select = widget.findChild(AlgSelectWidget, 'thres_select')
|
||||
|
||||
layer1=layer_combox.layer1
|
||||
pth1 = layer_combox.layer1.path
|
||||
pth2 = layer_combox.layer2.path
|
||||
|
||||
falg, fparams = filter_select.get_alg_and_params()
|
||||
cdalg, cdparams = unsupervised_select.get_alg_and_params()
|
||||
thalg, thparams = thres_select.get_alg_and_params()
|
||||
|
||||
if cdalg is None or thalg is None:
|
||||
return dict()
|
||||
|
||||
return dict(
|
||||
layer1=layer1,
|
||||
pth1 = pth1,
|
||||
pth2 = pth2,
|
||||
falg = falg,
|
||||
fparams = fparams,
|
||||
cdalg = cdalg,
|
||||
cdparams = cdparams,
|
||||
thalg = thalg,
|
||||
thparams = thparams,
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def run_alg(layer1=None,
|
||||
pth1 = None,
|
||||
pth2 = None,
|
||||
falg = None,
|
||||
fparams = None,
|
||||
cdalg = None,
|
||||
cdparams = None,
|
||||
thalg = None,
|
||||
thparams = None,
|
||||
send_message = None):
|
||||
|
||||
if cdalg is None or thalg is None:
|
||||
return
|
||||
|
||||
name = layer1.name
|
||||
|
||||
if falg is not None:
|
||||
pth1 = falg.run_alg(pth1, name=name, send_message= send_message, **fparams)
|
||||
pth2 = falg.run_alg(pth2, name=name, send_message= send_message, **fparams)
|
||||
|
||||
|
||||
cdpth = cdalg.run_alg(pth1, pth2, layer1.layer_parent, send_message= send_message,**cdparams)
|
||||
thpth = thalg.run_alg(cdpth, name=name, send_message= send_message, **thparams)
|
||||
|
||||
table_layer(thpth,layer1,name, send_message)
|
||||
|
||||
|
||||
|
||||
|
||||
class VegtationPlugin(BasicPlugin):
|
||||
|
||||
|
||||
@staticmethod
|
||||
def info():
|
||||
return {
|
||||
'name': 'VegtationPlugin',
|
||||
'description': 'VegtationPlugin',
|
||||
'author': 'RSCDER',
|
||||
'version': '1.0.0',
|
||||
}
|
||||
|
||||
def set_action(self):
|
||||
veg_menu = ActionManager().veg_menu
|
||||
# veg_menu.setIcon(IconInstance().UNSUPERVISED)
|
||||
# ActionManager().veg_menu.addMenu(veg_menu)
|
||||
|
||||
for key in VEG_CD.keys():
|
||||
alg:AlgFrontend = VEG_CD[key]
|
||||
if alg.get_name() is None:
|
||||
name = key
|
||||
else:
|
||||
name = alg.get_name()
|
||||
|
||||
action = QAction(name, veg_menu)
|
||||
func = partial(self.run_cd, alg)
|
||||
action.triggered.connect(func)
|
||||
|
||||
veg_menu.addAction(action)
|
||||
|
||||
|
||||
def run_cd(self, alg):
|
||||
dialog = VegtationCDMethod(self.mainwindow, alg)
|
||||
dialog.show()
|
||||
|
||||
if dialog.exec_() == QDialog.Accepted:
|
||||
t = Thread(target=self.run_cd_alg, args=(dialog,))
|
||||
t.start()
|
||||
|
||||
def run_cd_alg(self, w:VegtationCDMethod):
|
||||
|
||||
layer1=w.layer_combox.layer1
|
||||
pth1 = w.layer_combox.layer1.path
|
||||
pth2 = w.layer_combox.layer2.path
|
||||
name = layer1.layer_parent.name
|
||||
|
||||
falg, fparams = w.filter_select.get_alg_and_params()
|
||||
cdalg = w.alg
|
||||
cdparams = w.alg.get_params()
|
||||
thalg, thparams = w.thres_select.get_alg_and_params()
|
||||
|
||||
if cdalg is None or thalg is None:
|
||||
return
|
||||
|
||||
if falg is not None:
|
||||
pth1 = falg.run_alg(pth1, name=name, send_message=self.send_message, **fparams)
|
||||
pth2 = falg.run_alg(pth2, name=name, send_message=self.send_message, **fparams)
|
||||
|
||||
|
||||
cdpth = cdalg.run_alg(pth1, pth2, layer1.layer_parent, send_message=self.send_message,**cdparams)
|
||||
thpth = thalg.run_alg(cdpth, name=name, send_message=self.send_message, **thparams)
|
||||
|
||||
table_layer(thpth,layer1,name,self.send_message)
|
||||
|
455
plugins/veg_method/pic.py
Normal file
455
plugins/veg_method/pic.py
Normal file
@ -0,0 +1,455 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Resource object code
|
||||
#
|
||||
# Created by: The Resource Compiler for PyQt5 (Qt v5.12.9)
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
from PyQt5 import QtCore
|
||||
|
||||
qt_resource_data = b"\
|
||||
\x00\x00\x05\x32\
|
||||
\x3c\
|
||||
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
|
||||
\x30\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\x6e\
|
||||
\x6f\x22\x3f\x3e\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\x76\
|
||||
\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\x43\
|
||||
\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\x45\
|
||||
\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\
|
||||
\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\x53\
|
||||
\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\x31\
|
||||
\x2e\x64\x74\x64\x22\x3e\x3c\x73\x76\x67\x20\x74\x3d\x22\x31\x36\
|
||||
\x35\x35\x31\x30\x35\x33\x34\x38\x31\x31\x38\x22\x20\x63\x6c\x61\
|
||||
\x73\x73\x3d\x22\x69\x63\x6f\x6e\x22\x20\x76\x69\x65\x77\x42\x6f\
|
||||
\x78\x3d\x22\x30\x20\x30\x20\x31\x30\x32\x34\x20\x31\x30\x32\x34\
|
||||
\x22\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\
|
||||
\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
|
||||
\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\
|
||||
\x67\x22\x20\x70\x2d\x69\x64\x3d\x22\x32\x31\x33\x37\x22\x20\x78\
|
||||
\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\
|
||||
\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
|
||||
\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x77\x69\x64\x74\x68\x3d\
|
||||
\x22\x31\x32\x38\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x32\
|
||||
\x38\x22\x3e\x3c\x64\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x20\
|
||||
\x74\x79\x70\x65\x3d\x22\x74\x65\x78\x74\x2f\x63\x73\x73\x22\x3e\
|
||||
\x40\x66\x6f\x6e\x74\x2d\x66\x61\x63\x65\x20\x7b\x20\x66\x6f\x6e\
|
||||
\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x66\x65\x65\x64\x62\x61\
|
||||
\x63\x6b\x2d\x69\x63\x6f\x6e\x66\x6f\x6e\x74\x3b\x20\x73\x72\x63\
|
||||
\x3a\x20\x75\x72\x6c\x28\x22\x2f\x2f\x61\x74\x2e\x61\x6c\x69\x63\
|
||||
\x64\x6e\x2e\x63\x6f\x6d\x2f\x74\x2f\x66\x6f\x6e\x74\x5f\x31\x30\
|
||||
\x33\x31\x31\x35\x38\x5f\x75\x36\x39\x77\x38\x79\x68\x78\x64\x75\
|
||||
\x2e\x77\x6f\x66\x66\x32\x3f\x74\x3d\x31\x36\x33\x30\x30\x33\x33\
|
||||
\x37\x35\x39\x39\x34\x34\x22\x29\x20\x66\x6f\x72\x6d\x61\x74\x28\
|
||||
\x22\x77\x6f\x66\x66\x32\x22\x29\x2c\x20\x75\x72\x6c\x28\x22\x2f\
|
||||
\x2f\x61\x74\x2e\x61\x6c\x69\x63\x64\x6e\x2e\x63\x6f\x6d\x2f\x74\
|
||||
\x2f\x66\x6f\x6e\x74\x5f\x31\x30\x33\x31\x31\x35\x38\x5f\x75\x36\
|
||||
\x39\x77\x38\x79\x68\x78\x64\x75\x2e\x77\x6f\x66\x66\x3f\x74\x3d\
|
||||
\x31\x36\x33\x30\x30\x33\x33\x37\x35\x39\x39\x34\x34\x22\x29\x20\
|
||||
\x66\x6f\x72\x6d\x61\x74\x28\x22\x77\x6f\x66\x66\x22\x29\x2c\x20\
|
||||
\x75\x72\x6c\x28\x22\x2f\x2f\x61\x74\x2e\x61\x6c\x69\x63\x64\x6e\
|
||||
\x2e\x63\x6f\x6d\x2f\x74\x2f\x66\x6f\x6e\x74\x5f\x31\x30\x33\x31\
|
||||
\x31\x35\x38\x5f\x75\x36\x39\x77\x38\x79\x68\x78\x64\x75\x2e\x74\
|
||||
\x74\x66\x3f\x74\x3d\x31\x36\x33\x30\x30\x33\x33\x37\x35\x39\x39\
|
||||
\x34\x34\x22\x29\x20\x66\x6f\x72\x6d\x61\x74\x28\x22\x74\x72\x75\
|
||||
\x65\x74\x79\x70\x65\x22\x29\x3b\x20\x7d\x0a\x3c\x2f\x73\x74\x79\
|
||||
\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\x70\x61\x74\x68\x20\
|
||||
\x64\x3d\x22\x4d\x33\x31\x32\x2e\x38\x38\x38\x38\x38\x39\x20\x39\
|
||||
\x39\x35\x2e\x35\x35\x35\x35\x35\x36\x63\x2d\x31\x37\x2e\x30\x36\
|
||||
\x36\x36\x36\x37\x20\x30\x2d\x32\x38\x2e\x34\x34\x34\x34\x34\x34\
|
||||
\x2d\x35\x2e\x36\x38\x38\x38\x38\x39\x2d\x33\x39\x2e\x38\x32\x32\
|
||||
\x32\x32\x32\x2d\x31\x37\x2e\x30\x36\x36\x36\x36\x37\x2d\x32\x32\
|
||||
\x2e\x37\x35\x35\x35\x35\x36\x2d\x32\x32\x2e\x37\x35\x35\x35\x35\
|
||||
\x36\x2d\x31\x37\x2e\x30\x36\x36\x36\x36\x37\x2d\x35\x36\x2e\x38\
|
||||
\x38\x38\x38\x38\x39\x20\x35\x2e\x36\x38\x38\x38\x38\x39\x2d\x37\
|
||||
\x39\x2e\x36\x34\x34\x34\x34\x35\x6c\x33\x36\x34\x2e\x30\x38\x38\
|
||||
\x38\x38\x38\x2d\x33\x32\x39\x2e\x39\x35\x35\x35\x35\x35\x63\x31\
|
||||
\x31\x2e\x33\x37\x37\x37\x37\x38\x2d\x31\x31\x2e\x33\x37\x37\x37\
|
||||
\x37\x38\x20\x31\x37\x2e\x30\x36\x36\x36\x36\x37\x2d\x32\x32\x2e\
|
||||
\x37\x35\x35\x35\x35\x36\x20\x31\x37\x2e\x30\x36\x36\x36\x36\x37\
|
||||
\x2d\x33\x34\x2e\x31\x33\x33\x33\x33\x33\x20\x30\x2d\x31\x31\x2e\
|
||||
\x33\x37\x37\x37\x37\x38\x2d\x35\x2e\x36\x38\x38\x38\x38\x39\x2d\
|
||||
\x32\x32\x2e\x37\x35\x35\x35\x35\x36\x2d\x31\x37\x2e\x30\x36\x36\
|
||||
\x36\x36\x37\x2d\x33\x34\x2e\x31\x33\x33\x33\x33\x34\x4c\x32\x37\
|
||||
\x33\x2e\x30\x36\x36\x36\x36\x37\x20\x31\x38\x37\x2e\x37\x33\x33\
|
||||
\x33\x33\x33\x63\x2d\x32\x32\x2e\x37\x35\x35\x35\x35\x36\x2d\x32\
|
||||
\x32\x2e\x37\x35\x35\x35\x35\x36\x2d\x32\x38\x2e\x34\x34\x34\x34\
|
||||
\x34\x34\x2d\x35\x36\x2e\x38\x38\x38\x38\x38\x39\x2d\x35\x2e\x36\
|
||||
\x38\x38\x38\x38\x39\x2d\x37\x39\x2e\x36\x34\x34\x34\x34\x34\x20\
|
||||
\x32\x32\x2e\x37\x35\x35\x35\x35\x36\x2d\x32\x32\x2e\x37\x35\x35\
|
||||
\x35\x35\x36\x20\x35\x36\x2e\x38\x38\x38\x38\x38\x39\x2d\x32\x38\
|
||||
\x2e\x34\x34\x34\x34\x34\x34\x20\x37\x39\x2e\x36\x34\x34\x34\x34\
|
||||
\x34\x2d\x35\x2e\x36\x38\x38\x38\x38\x39\x6c\x33\x36\x34\x2e\x30\
|
||||
\x38\x38\x38\x38\x39\x20\x33\x31\x32\x2e\x38\x38\x38\x38\x38\x39\
|
||||
\x63\x33\x34\x2e\x31\x33\x33\x33\x33\x33\x20\x32\x38\x2e\x34\x34\
|
||||
\x34\x34\x34\x34\x20\x35\x36\x2e\x38\x38\x38\x38\x38\x39\x20\x37\
|
||||
\x33\x2e\x39\x35\x35\x35\x35\x36\x20\x35\x36\x2e\x38\x38\x38\x38\
|
||||
\x38\x39\x20\x31\x31\x39\x2e\x34\x36\x36\x36\x36\x37\x73\x2d\x31\
|
||||
\x37\x2e\x30\x36\x36\x36\x36\x37\x20\x38\x35\x2e\x33\x33\x33\x33\
|
||||
\x33\x33\x2d\x35\x31\x2e\x32\x20\x31\x31\x39\x2e\x34\x36\x36\x36\
|
||||
\x36\x36\x6c\x2d\x33\x36\x34\x2e\x30\x38\x38\x38\x38\x39\x20\x33\
|
||||
\x32\x39\x2e\x39\x35\x35\x35\x35\x36\x63\x2d\x31\x31\x2e\x33\x37\
|
||||
\x37\x37\x37\x38\x20\x35\x2e\x36\x38\x38\x38\x38\x39\x2d\x32\x38\
|
||||
\x2e\x34\x34\x34\x34\x34\x34\x20\x31\x31\x2e\x33\x37\x37\x37\x37\
|
||||
\x38\x2d\x33\x39\x2e\x38\x32\x32\x32\x32\x32\x20\x31\x31\x2e\x33\
|
||||
\x37\x37\x37\x37\x38\x7a\x22\x20\x70\x2d\x69\x64\x3d\x22\x32\x31\
|
||||
\x33\x38\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x2f\x73\x76\x67\
|
||||
\x3e\
|
||||
\x00\x00\x04\xf8\
|
||||
\x89\
|
||||
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
|
||||
\x00\x00\x80\x00\x00\x00\x80\x08\x06\x00\x00\x00\xc3\x3e\x61\xcb\
|
||||
\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x04\
|
||||
\xb2\x49\x44\x41\x54\x78\x5e\xed\x99\xef\x8e\x15\x45\x10\xc5\xab\
|
||||
\xf7\x71\xf0\x31\xa6\x7b\xdf\x40\xfc\x13\x10\x54\xa2\x04\x95\x68\
|
||||
\x50\x09\x2a\x51\x09\x2a\x41\x45\x09\x2a\x41\x82\x88\x4a\x80\x7d\
|
||||
\x85\xa9\x7e\x0c\x7d\x9c\x5b\x66\xd4\xd5\x05\x2e\x5b\x3b\xe5\x07\
|
||||
\xee\x9c\x3a\xfd\x75\xeb\x64\x73\xce\xf9\xa5\x7a\x66\x6e\x11\x9e\
|
||||
\xd4\x09\x94\xd4\xee\x69\x5e\x08\x40\x72\x08\x08\x00\x01\x48\x9e\
|
||||
\x40\x72\xfb\xdc\x00\x04\x20\x79\x02\xc9\xed\x73\x03\x10\x80\xe4\
|
||||
\x09\x24\xb7\xcf\x0d\x40\x00\x92\x27\x90\xdc\x3e\x37\x00\x01\x48\
|
||||
\x9e\x40\x72\xfb\xdc\x00\x04\x20\x79\x02\xc9\xed\x73\x03\x10\x80\
|
||||
\xe4\x09\x24\xb7\xcf\x0d\x40\x00\x92\x27\x90\xdc\x3e\x37\x00\x01\
|
||||
\x48\x9e\x40\x72\xfb\xdc\x00\x04\x20\x79\x02\xc9\xed\x73\x03\x10\
|
||||
\x80\xe4\x09\x24\xb7\xcf\x0d\x40\x00\x92\x27\x90\xdc\x3e\x37\x00\
|
||||
\x01\x48\x9e\x40\x72\xfb\xdc\x00\x04\x20\x79\x02\xc9\xed\x43\x6f\
|
||||
\x80\x61\x18\x0e\xf5\xde\xff\x48\xde\xf1\xbe\xf6\x61\x01\x98\xca\
|
||||
\xdf\xda\xda\xda\x59\xad\x56\x87\x09\xc1\x93\x19\x80\x04\x60\xb7\
|
||||
\x7c\x33\x7b\xa6\x94\xf2\x3b\x21\x48\x04\xc0\xde\xf2\x77\x6d\x13\
|
||||
\x82\x24\x00\xac\x2b\x9f\x10\xec\xff\x04\x04\x73\x05\xec\x57\x3e\
|
||||
\x21\x00\xdf\x00\x07\x29\x9f\x10\xac\x87\x60\xf1\x1b\x60\x4e\xf9\
|
||||
\x84\xe0\x71\x08\x16\x0d\x40\xa4\x7c\x42\xf0\x30\x04\x8b\x06\x60\
|
||||
\xb2\x42\x08\xfe\xdf\x67\xae\xc5\x03\x40\x08\x08\xc0\x5f\x09\x70\
|
||||
\x13\xc4\x40\x80\xd8\x00\xbb\xd6\x09\xc1\x7c\x08\xa0\x00\xe0\x26\
|
||||
\x20\x00\xbc\x0e\x66\x32\x00\xb7\x01\x78\x1d\xcc\x23\x00\x16\x00\
|
||||
\x5e\x07\x07\x03\x01\x1a\x00\x42\xe0\x43\x00\x0f\x00\x21\x48\xf2\
|
||||
\x6b\xa0\xc7\x3a\x5f\x11\x41\x7f\x0c\xf2\x8a\xdf\xfb\x77\x42\x00\
|
||||
\xf6\x63\xd0\x9c\xf2\xf9\x76\xc0\x0d\xf0\x6f\x02\xdc\x04\xff\xc1\
|
||||
\x90\xe2\x21\x70\x1d\xfb\x84\xe0\xef\x54\xd2\x02\xc0\xb7\x03\x02\
|
||||
\xc0\xcf\xc6\xd9\x37\x00\x1f\x0c\x93\x5f\x01\x7c\x45\x24\x00\x0f\
|
||||
\x3d\x1f\x66\x7c\x30\x4c\xfd\x10\xc8\xb7\x03\x6e\x80\xb5\x5f\x47\
|
||||
\x6a\xad\x1f\x8b\xc8\x27\x91\x0f\x4d\x22\xf2\xa9\xaa\x46\xb5\xc1\
|
||||
\x7f\x19\x97\x71\x03\x3c\x92\xdd\x30\x0c\xe7\x4b\x29\x17\x22\x91\
|
||||
\x9a\xd9\x85\xde\xfb\x04\xcf\x62\x0e\x01\xd8\x53\x55\xad\xf5\x43\
|
||||
\x11\xb9\x18\x6c\xef\xa2\xaa\x9e\x0f\x6a\x9f\x9a\x8c\x00\xfc\x13\
|
||||
\xfd\x30\x0c\xe7\x4a\x29\x9f\x07\x9b\xf8\x4c\x55\x3f\x0a\x6a\x9f\
|
||||
\xaa\x8c\x00\x88\x48\x6b\xed\xac\x99\x5d\x8a\x34\x51\x4a\xf9\x62\
|
||||
\x1c\xc7\x0f\x22\xda\x4d\xd0\xa4\x07\xa0\xd6\xfa\x9e\x88\x5c\x0e\
|
||||
\x96\x71\x49\x55\xcf\x05\xb5\x1b\x21\x4b\x0d\x40\x6b\xed\x8c\x99\
|
||||
\x7d\x15\x69\xc2\xcc\x2e\xf7\xde\xcf\x46\xb4\x9b\xa4\x49\x0b\x40\
|
||||
\xad\xf5\x1d\x11\xb9\x12\x2c\xe3\x4b\x55\x7d\x3f\xa8\xdd\x28\x59\
|
||||
\x4a\x00\x6a\xad\x6f\x8b\xc8\x37\x91\x26\xcc\xec\xeb\xde\xfb\xbb\
|
||||
\x11\xed\x26\x6a\xd2\x01\x30\x0c\xc3\xe9\x52\xca\xd5\x48\x19\xa5\
|
||||
\x94\x2b\xe3\x38\x9e\x89\x68\x37\x55\x93\x0a\x80\x5a\xeb\x9b\x22\
|
||||
\x72\x2d\x58\xc6\xb7\xaa\x3a\x5d\x1b\x50\x27\x0d\x00\xc3\x30\x9c\
|
||||
\x2a\xa5\x7c\x1f\x69\xcf\xcc\xae\xf6\xde\xa7\x6b\x03\xee\xa4\x00\
|
||||
\xa0\xb5\x76\xd2\xcc\xae\x07\xdb\xbb\xa6\xaa\xa7\x83\xda\x8d\x97\
|
||||
\xc1\x03\x50\x6b\x7d\x4d\x44\x6e\x04\x9b\xf8\x4e\x55\xdf\x0a\x6a\
|
||||
\x17\x21\x83\x06\xa0\xb5\x76\xc2\xcc\x6e\x06\x9b\xf8\x41\x55\xdf\
|
||||
\x08\x6a\x17\x23\x83\x05\xa0\xd6\xfa\x8a\x88\xdc\x0a\x36\x71\x5d\
|
||||
\x55\x4f\x05\xb5\x8b\x92\x41\x02\xd0\x5a\x3b\x6e\x66\xb7\x23\x4d\
|
||||
\x98\xd9\x8d\xde\xfb\xc9\x88\x76\x89\x1a\x38\x00\x6a\xad\x2f\x89\
|
||||
\xc8\x9d\x60\x19\x3f\xaa\xea\xeb\x41\xed\x22\x65\x50\x00\xb4\xd6\
|
||||
\x8e\x98\xd9\xaf\xc1\x26\x6e\xaa\xea\xf4\xc0\x98\xea\xc0\x00\x50\
|
||||
\x6b\x7d\x51\x44\xee\x46\xda\x2b\xa5\xdc\x1a\xc7\xf1\x44\x44\xbb\
|
||||
\x74\x0d\x04\x00\xdb\xdb\xdb\xcf\xaf\x56\xab\x7b\xc1\x32\x7e\x52\
|
||||
\xd5\x57\x83\xda\xc5\xcb\x16\x0f\x40\xad\xf5\xb0\x88\x3c\x88\x34\
|
||||
\x61\x66\x3f\xf7\xde\x5f\x8e\x68\x51\x34\x08\x00\xec\x88\xc8\xb3\
|
||||
\x73\x0b\x29\xa5\xdc\x19\xc7\xf1\xf8\x5c\x1d\xda\xfc\xe2\x01\x98\
|
||||
\x0a\xa9\xb5\xce\x85\xe0\x17\x55\x3d\x86\x56\x66\xc4\x0f\x04\x00\
|
||||
\x73\x20\x30\xb3\xdf\x7a\xef\x47\x23\x61\x21\x6a\x60\x00\x38\x20\
|
||||
\x04\x77\x55\xf5\x08\x62\x91\x51\x4f\x50\x00\x38\x10\xdc\x53\xd5\
|
||||
\xe9\x55\x91\x67\x4f\x02\x70\x00\xac\x83\xa0\x94\x72\x7f\x1c\xc7\
|
||||
\x17\xd8\xfc\xe3\x09\x40\x02\xf0\x08\x04\x3b\xaa\xfa\x1c\xcb\x5f\
|
||||
\x9f\x00\x2c\x00\xbb\x10\xa8\xea\xf4\x9d\x80\xe7\x09\x09\x40\x03\
|
||||
\xc0\xd6\xfd\x04\x08\x80\x9f\x11\xf4\x04\x01\x80\xae\xd7\x37\x47\
|
||||
\x00\xfc\x8c\xa0\x27\x08\x00\x74\xbd\xbe\x39\x02\xe0\x67\x04\x3d\
|
||||
\x41\x00\xa0\xeb\xf5\xcd\x11\x00\x3f\x23\xe8\x09\x02\x00\x5d\xaf\
|
||||
\x6f\x8e\x00\xf8\x19\x41\x4f\x10\x00\xe8\x7a\x7d\x73\x04\xc0\xcf\
|
||||
\x08\x7a\x82\x00\x40\xd7\xeb\x9b\x23\x00\x7e\x46\xd0\x13\x04\x00\
|
||||
\xba\x5e\xdf\x1c\x01\xf0\x33\x82\x9e\x20\x00\xd0\xf5\xfa\xe6\x08\
|
||||
\x80\x9f\x11\xf4\x04\x01\x80\xae\xd7\x37\x47\x00\xfc\x8c\xa0\x27\
|
||||
\x08\x00\x74\xbd\xbe\x39\x02\xe0\x67\x04\x3d\x41\x00\xa0\xeb\xf5\
|
||||
\xcd\x11\x00\x3f\x23\xe8\x09\x02\x00\x5d\xaf\x6f\x8e\x00\xf8\x19\
|
||||
\x41\x4f\x10\x00\xe8\x7a\x7d\x73\x04\xc0\xcf\x08\x7a\x82\x00\x40\
|
||||
\xd7\xeb\x9b\x23\x00\x7e\x46\xd0\x13\x04\x00\xba\x5e\xdf\x1c\x01\
|
||||
\xf0\x33\x82\x9e\x20\x00\xd0\xf5\xfa\xe6\x08\x80\x9f\x11\xf4\x04\
|
||||
\x01\x80\xae\xd7\x37\x47\x00\xfc\x8c\xa0\x27\x08\x00\x74\xbd\xbe\
|
||||
\xb9\x3f\x01\xc2\xa1\x1b\x9f\x9b\x5d\x0e\x95\x00\x00\x00\x00\x49\
|
||||
\x45\x4e\x44\xae\x42\x60\x82\
|
||||
\x00\x00\x05\x0d\
|
||||
\x3c\
|
||||
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
|
||||
\x30\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\x6e\
|
||||
\x6f\x22\x3f\x3e\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\x76\
|
||||
\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\x43\
|
||||
\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\x45\
|
||||
\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\
|
||||
\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\x53\
|
||||
\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\x31\
|
||||
\x2e\x64\x74\x64\x22\x3e\x3c\x73\x76\x67\x20\x74\x3d\x22\x31\x36\
|
||||
\x35\x35\x31\x30\x35\x33\x35\x33\x37\x31\x33\x22\x20\x63\x6c\x61\
|
||||
\x73\x73\x3d\x22\x69\x63\x6f\x6e\x22\x20\x76\x69\x65\x77\x42\x6f\
|
||||
\x78\x3d\x22\x30\x20\x30\x20\x31\x30\x32\x34\x20\x31\x30\x32\x34\
|
||||
\x22\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\
|
||||
\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
|
||||
\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\
|
||||
\x67\x22\x20\x70\x2d\x69\x64\x3d\x22\x32\x32\x39\x32\x22\x20\x78\
|
||||
\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\
|
||||
\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
|
||||
\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x77\x69\x64\x74\x68\x3d\
|
||||
\x22\x31\x32\x38\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x32\
|
||||
\x38\x22\x3e\x3c\x64\x65\x66\x73\x3e\x3c\x73\x74\x79\x6c\x65\x20\
|
||||
\x74\x79\x70\x65\x3d\x22\x74\x65\x78\x74\x2f\x63\x73\x73\x22\x3e\
|
||||
\x40\x66\x6f\x6e\x74\x2d\x66\x61\x63\x65\x20\x7b\x20\x66\x6f\x6e\
|
||||
\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x66\x65\x65\x64\x62\x61\
|
||||
\x63\x6b\x2d\x69\x63\x6f\x6e\x66\x6f\x6e\x74\x3b\x20\x73\x72\x63\
|
||||
\x3a\x20\x75\x72\x6c\x28\x22\x2f\x2f\x61\x74\x2e\x61\x6c\x69\x63\
|
||||
\x64\x6e\x2e\x63\x6f\x6d\x2f\x74\x2f\x66\x6f\x6e\x74\x5f\x31\x30\
|
||||
\x33\x31\x31\x35\x38\x5f\x75\x36\x39\x77\x38\x79\x68\x78\x64\x75\
|
||||
\x2e\x77\x6f\x66\x66\x32\x3f\x74\x3d\x31\x36\x33\x30\x30\x33\x33\
|
||||
\x37\x35\x39\x39\x34\x34\x22\x29\x20\x66\x6f\x72\x6d\x61\x74\x28\
|
||||
\x22\x77\x6f\x66\x66\x32\x22\x29\x2c\x20\x75\x72\x6c\x28\x22\x2f\
|
||||
\x2f\x61\x74\x2e\x61\x6c\x69\x63\x64\x6e\x2e\x63\x6f\x6d\x2f\x74\
|
||||
\x2f\x66\x6f\x6e\x74\x5f\x31\x30\x33\x31\x31\x35\x38\x5f\x75\x36\
|
||||
\x39\x77\x38\x79\x68\x78\x64\x75\x2e\x77\x6f\x66\x66\x3f\x74\x3d\
|
||||
\x31\x36\x33\x30\x30\x33\x33\x37\x35\x39\x39\x34\x34\x22\x29\x20\
|
||||
\x66\x6f\x72\x6d\x61\x74\x28\x22\x77\x6f\x66\x66\x22\x29\x2c\x20\
|
||||
\x75\x72\x6c\x28\x22\x2f\x2f\x61\x74\x2e\x61\x6c\x69\x63\x64\x6e\
|
||||
\x2e\x63\x6f\x6d\x2f\x74\x2f\x66\x6f\x6e\x74\x5f\x31\x30\x33\x31\
|
||||
\x31\x35\x38\x5f\x75\x36\x39\x77\x38\x79\x68\x78\x64\x75\x2e\x74\
|
||||
\x74\x66\x3f\x74\x3d\x31\x36\x33\x30\x30\x33\x33\x37\x35\x39\x39\
|
||||
\x34\x34\x22\x29\x20\x66\x6f\x72\x6d\x61\x74\x28\x22\x74\x72\x75\
|
||||
\x65\x74\x79\x70\x65\x22\x29\x3b\x20\x7d\x0a\x3c\x2f\x73\x74\x79\
|
||||
\x6c\x65\x3e\x3c\x2f\x64\x65\x66\x73\x3e\x3c\x70\x61\x74\x68\x20\
|
||||
\x64\x3d\x22\x4d\x35\x31\x37\x2e\x36\x38\x38\x38\x38\x39\x20\x37\
|
||||
\x39\x36\x2e\x34\x34\x34\x34\x34\x34\x63\x2d\x34\x35\x2e\x35\x31\
|
||||
\x31\x31\x31\x31\x20\x30\x2d\x38\x35\x2e\x33\x33\x33\x33\x33\x33\
|
||||
\x2d\x31\x37\x2e\x30\x36\x36\x36\x36\x37\x2d\x31\x31\x39\x2e\x34\
|
||||
\x36\x36\x36\x36\x37\x2d\x35\x31\x2e\x32\x4c\x37\x33\x2e\x39\x35\
|
||||
\x35\x35\x35\x36\x20\x33\x38\x31\x2e\x31\x35\x35\x35\x35\x36\x63\
|
||||
\x2d\x32\x32\x2e\x37\x35\x35\x35\x35\x36\x2d\x32\x32\x2e\x37\x35\
|
||||
\x35\x35\x35\x36\x2d\x31\x37\x2e\x30\x36\x36\x36\x36\x37\x2d\x35\
|
||||
\x36\x2e\x38\x38\x38\x38\x38\x39\x20\x35\x2e\x36\x38\x38\x38\x38\
|
||||
\x38\x2d\x37\x39\x2e\x36\x34\x34\x34\x34\x35\x20\x32\x32\x2e\x37\
|
||||
\x35\x35\x35\x35\x36\x2d\x32\x32\x2e\x37\x35\x35\x35\x35\x36\x20\
|
||||
\x35\x36\x2e\x38\x38\x38\x38\x38\x39\x2d\x31\x37\x2e\x30\x36\x36\
|
||||
\x36\x36\x37\x20\x37\x39\x2e\x36\x34\x34\x34\x34\x35\x20\x35\x2e\
|
||||
\x36\x38\x38\x38\x38\x39\x6c\x33\x32\x39\x2e\x39\x35\x35\x35\x35\
|
||||
\x35\x20\x33\x36\x34\x2e\x30\x38\x38\x38\x38\x39\x63\x35\x2e\x36\
|
||||
\x38\x38\x38\x38\x39\x20\x35\x2e\x36\x38\x38\x38\x38\x39\x20\x31\
|
||||
\x37\x2e\x30\x36\x36\x36\x36\x37\x20\x31\x31\x2e\x33\x37\x37\x37\
|
||||
\x37\x38\x20\x32\x38\x2e\x34\x34\x34\x34\x34\x35\x20\x31\x31\x2e\
|
||||
\x33\x37\x37\x37\x37\x38\x73\x32\x32\x2e\x37\x35\x35\x35\x35\x36\
|
||||
\x2d\x35\x2e\x36\x38\x38\x38\x38\x39\x20\x33\x34\x2e\x31\x33\x33\
|
||||
\x33\x33\x33\x2d\x31\x37\x2e\x30\x36\x36\x36\x36\x37\x6c\x33\x31\
|
||||
\x32\x2e\x38\x38\x38\x38\x38\x39\x2d\x33\x36\x34\x2e\x30\x38\x38\
|
||||
\x38\x38\x39\x63\x32\x32\x2e\x37\x35\x35\x35\x35\x36\x2d\x32\x32\
|
||||
\x2e\x37\x35\x35\x35\x35\x36\x20\x35\x36\x2e\x38\x38\x38\x38\x38\
|
||||
\x39\x2d\x32\x38\x2e\x34\x34\x34\x34\x34\x34\x20\x37\x39\x2e\x36\
|
||||
\x34\x34\x34\x34\x35\x2d\x35\x2e\x36\x38\x38\x38\x38\x39\x20\x32\
|
||||
\x32\x2e\x37\x35\x35\x35\x35\x36\x20\x32\x32\x2e\x37\x35\x35\x35\
|
||||
\x35\x36\x20\x32\x38\x2e\x34\x34\x34\x34\x34\x34\x20\x35\x36\x2e\
|
||||
\x38\x38\x38\x38\x38\x39\x20\x35\x2e\x36\x38\x38\x38\x38\x38\x20\
|
||||
\x37\x39\x2e\x36\x34\x34\x34\x34\x35\x4c\x36\x33\x37\x2e\x31\x35\
|
||||
\x35\x35\x35\x36\x20\x37\x33\x39\x2e\x35\x35\x35\x35\x35\x36\x63\
|
||||
\x2d\x32\x38\x2e\x34\x34\x34\x34\x34\x34\x20\x33\x39\x2e\x38\x32\
|
||||
\x32\x32\x32\x32\x2d\x36\x38\x2e\x32\x36\x36\x36\x36\x37\x20\x35\
|
||||
\x36\x2e\x38\x38\x38\x38\x38\x39\x2d\x31\x31\x39\x2e\x34\x36\x36\
|
||||
\x36\x36\x37\x20\x35\x36\x2e\x38\x38\x38\x38\x38\x38\x20\x35\x2e\
|
||||
\x36\x38\x38\x38\x38\x39\x20\x30\x20\x30\x20\x30\x20\x30\x20\x30\
|
||||
\x7a\x22\x20\x70\x2d\x69\x64\x3d\x22\x32\x32\x39\x33\x22\x3e\x3c\
|
||||
\x2f\x70\x61\x74\x68\x3e\x3c\x2f\x73\x76\x67\x3e\
|
||||
\x00\x00\x07\x08\
|
||||
\x89\
|
||||
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
|
||||
\x00\x00\x80\x00\x00\x00\x80\x08\x06\x00\x00\x00\xc3\x3e\x61\xcb\
|
||||
\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x06\
|
||||
\xc2\x49\x44\x41\x54\x78\x5e\xed\x9b\x7b\x68\x1c\x55\x14\xc6\xcf\
|
||||
\xc9\x6c\x51\x50\x50\xa2\x28\xa8\x28\x28\x28\x28\x28\x28\x28\x28\
|
||||
\xe8\xec\xce\xce\x2e\x0a\x0a\x2a\xe6\x61\xd3\x52\x69\xf1\x51\xd1\
|
||||
\xfa\x2a\x4a\x8b\x62\x8b\x5a\xd1\x2a\x5a\x14\x2b\x6a\x8b\x5a\xa3\
|
||||
\x35\x54\xc5\x77\x66\xee\x4d\x57\x22\x0d\xc5\x42\xb1\x50\x28\x15\
|
||||
\x25\x50\x14\x4a\x45\xa9\x18\x34\x66\x33\x47\x46\x6e\x30\x94\x24\
|
||||
\xdd\xb9\xfb\x9a\xd9\x73\xf6\xaf\x40\xee\x77\x77\xbe\xef\xfc\xf6\
|
||||
\xbb\xb3\xbb\x09\x82\x3c\x58\x27\x80\xac\xdd\x8b\x79\x10\x00\x98\
|
||||
\x43\x20\x00\x08\x00\xcc\x13\x60\x6e\x5f\x1a\x40\x00\x60\x9e\x00\
|
||||
\x73\xfb\xd2\x00\x02\x00\xf3\x04\x98\xdb\x97\x06\x10\x00\x98\x27\
|
||||
\xc0\xdc\xbe\x34\x80\x00\xc0\x3c\x01\xe6\xf6\xa5\x01\x04\x00\xe6\
|
||||
\x09\x30\xb7\x2f\x0d\x20\x00\x30\x4f\x80\xb9\x7d\x69\x00\x01\x80\
|
||||
\x79\x02\xcc\xed\x4b\x03\x08\x00\xcc\x13\x60\x6e\x5f\x1a\x40\x00\
|
||||
\x60\x9e\x00\x73\xfb\xd2\x00\x02\x00\xf3\x04\x98\xdb\x97\x06\x10\
|
||||
\x00\x98\x27\xc0\xdc\xbe\x34\x80\x00\xc0\x3c\x01\xe6\xf6\xa5\x01\
|
||||
\x04\x00\xe6\x09\x30\xb7\x2f\x0d\x20\x00\x30\x4f\x80\xb9\x7d\x69\
|
||||
\x00\x01\x80\x79\x02\xcc\xed\x4b\x03\x08\x00\xcc\x13\x60\x6e\x5f\
|
||||
\x1a\x40\x00\x60\x9e\x00\x73\xfb\xd2\x00\x02\x00\xf3\x04\x98\xdb\
|
||||
\x97\x06\x10\x00\x98\x27\xc0\xdc\x7e\xe6\x1a\xc0\xf7\xfd\xf5\xd5\
|
||||
\x6a\x75\xc7\xce\x9d\x3b\xbf\x4f\xfb\xec\x5c\xd7\xcd\xe5\x72\xb9\
|
||||
\x41\xa5\x54\x4f\x5a\xaf\x35\x53\x00\x78\x9e\xb7\x11\x11\x1f\x06\
|
||||
\x80\x83\x44\x34\xa0\xb5\xfe\x2e\xad\xc1\xba\xae\x7b\xa2\xe3\x38\
|
||||
\x83\x88\x78\x33\x00\x0c\xa5\x15\x82\xcc\x00\x50\x2c\x16\x5f\x05\
|
||||
\x80\x95\x33\x03\x27\xa2\x71\xc7\x71\x16\x07\x41\xb0\x2b\x6d\x10\
|
||||
\xb8\xae\x7b\xb2\x19\xfe\x8d\xb3\xae\x2d\x95\x10\x64\x02\x00\xcf\
|
||||
\xf3\xb6\x22\xe2\xb2\x39\x06\xfd\x33\x00\x0c\x28\xa5\x2a\x69\x81\
|
||||
\xc0\x75\xdd\x53\xcd\xf0\xaf\x9f\xe3\x9a\x52\x07\x41\xaa\x01\x88\
|
||||
\x6b\x34\x97\xcb\x6d\x03\x80\x5b\x17\x18\xf0\x11\x44\x1c\x08\xc3\
|
||||
\x30\x68\x37\x04\xae\xeb\x9e\xbe\x68\xd1\xa2\x41\x22\xf2\x17\xb8\
|
||||
\x96\x54\x41\x90\x5a\x00\xca\xe5\x72\xf7\xf4\xf4\xf4\x20\x00\x94\
|
||||
\x6b\x18\xec\x51\x73\x4f\xf0\x79\x0d\x6b\x9b\xb2\xc4\xf3\xbc\x33\
|
||||
\x11\xf1\x7d\x00\xc8\xd7\xf0\x04\xa9\x81\x20\x95\x00\xb8\xae\x7b\
|
||||
\x8e\xe3\x38\xdb\x11\xf1\xea\x1a\xc2\x9c\x59\xf2\x97\x39\x0e\x3e\
|
||||
\x4a\xa0\x69\xc8\xd2\x42\xa1\x70\x76\x5c\xfb\x44\x74\x6d\x82\x0d\
|
||||
\x53\x01\x41\xea\x00\xc8\xe7\xf3\x17\x39\x8e\xf3\x21\x00\x5c\x9a\
|
||||
\x20\xcc\x99\xa5\xd3\x44\xb4\x58\x6b\xbd\xdd\x42\x6b\x25\x29\x14\
|
||||
\x0a\xe7\x99\xe1\x27\x81\x75\xe6\xb9\xda\x0e\x41\xea\x00\x88\x93\
|
||||
\xf1\x7d\xff\x09\x22\x5a\x67\x35\x11\x00\x40\xc4\xa5\x61\x18\xbe\
|
||||
\x6b\xab\xaf\x55\x57\x28\x14\x2e\x30\xc3\xbf\xb2\x56\xcd\xac\x75\
|
||||
\x11\x00\xf4\x28\xa5\x76\x58\x68\x1b\x26\x49\x25\x00\xb1\x3b\xcf\
|
||||
\xf3\x1e\x47\xc4\xf5\xb6\x4e\x89\x68\x85\xd6\xfa\x2d\x5b\xfd\xf1\
|
||||
\x74\xa6\xa9\xe2\x7b\x94\xcb\x8f\xb7\x76\x8e\xdf\x4f\x11\x51\x8f\
|
||||
\xd6\xfa\x13\x0b\x6d\x43\x25\xa9\x05\x20\x76\x59\x2c\x16\xd7\x02\
|
||||
\xc0\x53\x75\x38\x5e\xa9\x94\x7a\xad\x0e\xfd\x9c\xd2\x7c\x3e\x7f\
|
||||
\x49\xfc\xca\xb7\x3c\xa6\xfe\xee\xea\xea\xea\x09\x82\xe0\xb3\x46\
|
||||
\x5f\x97\xcd\x7e\xa9\x06\xc0\x1c\x07\x6b\x88\xe8\x69\x1b\x73\xb1\
|
||||
\x86\x88\x1e\xd0\x5a\xbf\x6c\xab\x3f\x56\x57\x2e\x97\x2f\x33\xef\
|
||||
\x4e\x2e\xb6\xd8\x73\x02\x11\x7b\xc2\x30\xfc\xd2\x42\xdb\x14\x49\
|
||||
\xea\x01\x30\x4d\xf0\x18\x00\x6c\xa8\x23\x81\xd5\x4a\xa9\x8d\x75\
|
||||
\xe8\xff\x93\x96\x4a\xa5\x2b\xa2\x28\x8a\x5f\xf9\x17\x5a\xec\xf5\
|
||||
\x07\x11\xf5\x6a\xad\xbf\xb6\xd0\x36\x4d\x92\x09\x00\x4c\x13\x3c\
|
||||
\x4a\x44\xcf\xda\x26\x81\x88\x6b\xc3\x30\x7c\xc6\x56\x5f\x2a\x95\
|
||||
\xae\x32\xc3\x3f\x3f\xe9\x1e\x88\xf8\x7b\x14\x45\xf1\xf0\xc3\xa4\
|
||||
\xda\x66\xaf\xcf\x0c\x00\xa6\x09\x56\x03\xc0\x73\x75\x84\xb2\x4e\
|
||||
\x29\xf5\x64\x52\xbd\xef\xfb\xd7\x10\x51\xfc\xca\x3f\x37\xa9\x16\
|
||||
\x00\x7e\xed\xea\xea\xea\x0d\x82\x60\xc4\x42\xdb\x74\x49\xa6\x00\
|
||||
\x30\x10\x3c\x02\x00\xcf\xdb\x26\x83\x88\x1b\xc2\x30\x5c\x53\xab\
|
||||
\xde\xf7\xfd\xeb\xcc\xf0\xcf\xaa\x55\x33\x6b\xdd\x61\x44\xec\x0d\
|
||||
\xc3\xf0\x1b\x0b\x6d\x4b\x24\x99\x03\xc0\x1c\x07\x0f\x11\xd1\x0b\
|
||||
\xb6\x09\xc5\x5a\xad\x75\x0c\xd2\x82\x8f\x52\xa9\x54\x88\xa2\x28\
|
||||
\xfe\x78\xf7\x8c\xe3\xad\x9d\xe3\xf7\xbf\x00\x40\xaf\x52\xea\x5b\
|
||||
\x0b\x6d\xcb\x24\x99\x04\xc0\x34\xc1\x83\x00\xf0\xa2\x6d\x52\x88\
|
||||
\xb8\x29\x0c\xc3\x55\xf3\xe9\x7d\xdf\x2f\x99\x57\xfe\x69\x16\xcf\
|
||||
\x71\xc8\xdc\xf0\x8d\x59\x68\x5b\x2a\xc9\x2c\x00\xa6\x09\x56\x11\
|
||||
\xd1\x4b\x75\x24\xb6\x59\x29\x75\xcf\xb1\x7a\xdf\xf7\x6f\x30\xc3\
|
||||
\x3f\x25\xe9\xde\x88\x38\x8e\x88\x7d\x41\x10\xec\x4e\xaa\x6d\xc7\
|
||||
\xfa\x4c\x03\x10\x07\xe6\x79\xde\xfd\x88\x58\xcf\xfb\xfc\x2d\x4a\
|
||||
\xa9\xe5\x33\xe1\xfb\xbe\x7f\x93\x19\xfe\x49\x16\x03\xf9\xc9\x9c\
|
||||
\xf9\x7b\x2c\xb4\x6d\x91\x64\x1e\x00\x73\x1c\xdc\x07\x00\x9b\x6c\
|
||||
\x13\x24\xa2\x6d\x5a\xeb\x25\xc5\x62\xf1\x16\x00\x88\xef\xf6\x4f\
|
||||
\xb0\xd8\xeb\x07\x73\xe6\xef\xb5\xd0\xb6\x4d\xd2\x11\x00\x98\xe3\
|
||||
\xe0\x5e\x22\x7a\xa5\x8e\x24\xe3\x6f\x20\xe3\x3f\x3c\x71\x2c\xf6\
|
||||
\x38\x60\xce\xfc\x7d\x16\xda\xb6\x4a\x3a\x06\x00\x73\x1c\xac\x44\
|
||||
\xc4\xf8\x6f\x07\x5b\xf6\x20\xa2\xfd\xb9\x5c\xae\x77\x78\x78\x78\
|
||||
\x7f\xcb\x9e\xb4\x81\x4f\xd4\x51\x00\x98\x26\xb8\x9b\x88\x1a\xfe\
|
||||
\x05\xd0\x3c\x99\xef\x33\x1f\xf2\x1c\x68\xe0\x4c\x5a\xba\x55\xc7\
|
||||
\x01\x60\x9a\xe0\x2e\x44\xdc\xdc\xe4\x24\xf7\x12\x51\x9f\xd6\xfa\
|
||||
\x60\x93\x9f\xa7\xa9\xdb\x77\x24\x00\xe6\xc6\xf0\x4e\x00\x78\xbd\
|
||||
\x49\xe9\xed\x89\xa2\xa8\x6f\x64\x64\xe4\xc7\x26\xed\xdf\xb2\x6d\
|
||||
\x3b\x16\x00\x73\x1c\xac\x20\xa2\x37\x1a\x9c\xe6\xee\x6a\xb5\xda\
|
||||
\x57\xa9\x54\xc6\x1b\xbc\x6f\x5b\xb6\xeb\x68\x00\xcc\x71\xb0\x1c\
|
||||
\x11\xdf\x6c\x44\xba\x88\xb8\xcb\x7c\xc8\x73\xa8\x11\xfb\xa5\x61\
|
||||
\x8f\x8e\x07\xc0\x1c\x07\x77\x00\xc0\x96\x3a\x03\x1f\x8d\x87\x1f\
|
||||
\x86\x61\xfc\x19\x7f\xc7\x3c\x58\x00\x60\x8e\x83\x65\x44\xb4\xd5\
|
||||
\x72\x72\x15\x73\xc3\x77\xd8\x52\x9f\x5a\x19\x1b\x00\x4c\x13\x2c\
|
||||
\x05\x80\xb7\x13\x4e\x43\x4f\x4e\x4e\xf6\x8f\x8e\x8e\x1e\x49\xa8\
|
||||
\xcb\xc4\x72\x56\x00\x98\x26\x58\x42\x44\xef\xd4\x38\x9d\xc0\x71\
|
||||
\x9c\xfe\xe1\xe1\xe1\xdf\x6a\x5c\x9f\xb9\x65\xec\x00\x30\x37\x86\
|
||||
\x03\x88\xb8\xe0\xff\x0d\x20\xe2\x57\x44\xd4\xaf\x94\x3a\x9a\xb9\
|
||||
\xa9\x26\xb8\x60\x96\x00\x98\xe3\xe0\x76\x00\x78\x6f\x9e\xac\xbe\
|
||||
\x30\x6f\xf5\xfe\x4c\x90\x65\x26\x97\xb2\x05\xc0\x1c\x07\xfd\xe6\
|
||||
\xab\xdf\xd9\xc3\xfb\x74\x62\x62\xa2\x6f\x6c\x6c\x2c\xfe\x5f\xc3\
|
||||
\x8e\x7f\xb0\x06\xc0\x1c\x07\xbd\x88\xf8\x41\xfc\x33\x11\x7d\xdc\
|
||||
\xdd\xdd\xdd\x37\x34\x34\xf4\x4f\xc7\x4f\xde\x18\x64\x0f\x80\x39\
|
||||
\x0e\x7a\x10\xf1\xb6\xa9\xa9\xa9\xfe\x4a\xa5\x52\xe5\x32\xfc\xd8\
|
||||
\xa7\x00\xf0\xff\xb4\xe3\x2c\x88\xd3\xf0\x05\x00\x6e\xd3\x9e\xc3\
|
||||
\xaf\x34\x00\x73\x08\x04\x00\x01\x80\x79\x02\xcc\xed\x4b\x03\x08\
|
||||
\x00\xcc\x13\x60\x6e\x5f\x1a\x40\x00\x60\x9e\x00\x73\xfb\xd2\x00\
|
||||
\x02\x00\xf3\x04\x98\xdb\x97\x06\x10\x00\x98\x27\xc0\xdc\xbe\x34\
|
||||
\x80\x00\xc0\x3c\x01\xe6\xf6\xa5\x01\x04\x00\xe6\x09\x30\xb7\x2f\
|
||||
\x0d\x20\x00\x30\x4f\x80\xb9\x7d\x69\x00\x01\x80\x79\x02\xcc\xed\
|
||||
\x4b\x03\x08\x00\xcc\x13\x60\x6e\x5f\x1a\x40\x00\x60\x9e\x00\x73\
|
||||
\xfb\xd2\x00\x02\x00\xf3\x04\x98\xdb\x97\x06\x10\x00\x98\x27\xc0\
|
||||
\xdc\xbe\x34\x80\x00\xc0\x3c\x01\xe6\xf6\xa5\x01\x04\x00\xe6\x09\
|
||||
\x30\xb7\x2f\x0d\x20\x00\x30\x4f\x80\xb9\x7d\x69\x00\x01\x80\x79\
|
||||
\x02\xcc\xed\x4b\x03\x08\x00\xcc\x13\x60\x6e\x5f\x1a\x40\x00\x60\
|
||||
\x9e\x00\x73\xfb\xd2\x00\x02\x00\xf3\x04\x98\xdb\x97\x06\x10\x00\
|
||||
\x98\x27\xc0\xdc\xbe\x34\x80\x00\xc0\x3c\x01\xe6\xf6\xa5\x01\x98\
|
||||
\x03\xf0\x2f\x1a\xf0\xdc\x90\x9e\x40\x3c\x9b\x00\x00\x00\x00\x49\
|
||||
\x45\x4e\x44\xae\x42\x60\x82\
|
||||
"
|
||||
|
||||
qt_resource_name = b"\
|
||||
\x00\x07\
|
||||
\x07\x3b\xe0\xb3\
|
||||
\x00\x70\
|
||||
\x00\x6c\x00\x75\x00\x67\x00\x69\x00\x6e\x00\x73\
|
||||
\x00\x06\
|
||||
\x05\x04\x66\x45\
|
||||
\x00\x49\
|
||||
\x00\x6e\x00\x5f\x00\x6f\x00\x6e\x00\x65\
|
||||
\x00\x03\
|
||||
\x00\x00\x76\xf3\
|
||||
\x00\x70\
|
||||
\x00\x69\x00\x63\
|
||||
\x00\x08\
|
||||
\x09\xe6\x72\x67\
|
||||
\x7b\xad\
|
||||
\x59\x34\x00\x20\x53\xf3\x00\x2e\x00\x73\x00\x76\x00\x67\
|
||||
\x00\x0b\
|
||||
\x0f\x8a\xc9\x87\
|
||||
\x7b\xad\
|
||||
\x59\x34\x00\x5f\x52\x17\x88\x68\x54\x11\x53\xf3\x00\x2e\x00\x70\x00\x6e\x00\x67\
|
||||
\x00\x08\
|
||||
\x04\x1e\x72\x67\
|
||||
\x7b\xad\
|
||||
\x59\x34\x00\x20\x4e\x0b\x00\x2e\x00\x73\x00\x76\x00\x67\
|
||||
\x00\x0b\
|
||||
\x0e\xdf\xc8\xa7\
|
||||
\x7b\xad\
|
||||
\x59\x34\x00\x5f\x52\x17\x88\x68\x5c\x55\x5f\x00\x00\x2e\x00\x70\x00\x6e\x00\x67\
|
||||
"
|
||||
|
||||
qt_resource_struct_v1 = b"\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
|
||||
\x00\x00\x00\x14\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\
|
||||
\x00\x00\x00\x26\x00\x02\x00\x00\x00\x04\x00\x00\x00\x04\
|
||||
\x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x0a\x32\
|
||||
\x00\x00\x00\x32\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x01\x00\x00\x0f\x43\
|
||||
\x00\x00\x00\x48\x00\x00\x00\x00\x00\x01\x00\x00\x05\x36\
|
||||
"
|
||||
|
||||
qt_resource_struct_v2 = b"\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x14\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x26\x00\x02\x00\x00\x00\x04\x00\x00\x00\x04\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x0a\x32\
|
||||
\x00\x00\x01\x81\x5b\xf7\x7e\xef\
|
||||
\x00\x00\x00\x32\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
|
||||
\x00\x00\x01\x81\x5b\xf7\x72\x92\
|
||||
\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x01\x00\x00\x0f\x43\
|
||||
\x00\x00\x01\x81\x5b\xfc\x68\x05\
|
||||
\x00\x00\x00\x48\x00\x00\x00\x00\x00\x01\x00\x00\x05\x36\
|
||||
\x00\x00\x01\x81\x5b\xfc\x85\xb4\
|
||||
"
|
||||
|
||||
qt_version = [int(v) for v in QtCore.qVersion().split('.')]
|
||||
if qt_version < [5, 8, 0]:
|
||||
rcc_version = 1
|
||||
qt_resource_struct = qt_resource_struct_v1
|
||||
else:
|
||||
rcc_version = 2
|
||||
qt_resource_struct = qt_resource_struct_v2
|
||||
|
||||
def qInitResources():
|
||||
QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
|
||||
|
||||
def qCleanupResources():
|
||||
QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
|
||||
|
||||
qInitResources()
|
0
plugins/veg_method/readme.md
Normal file
0
plugins/veg_method/readme.md
Normal file
12424
plugins/veg_method/scripts/ACD.py
Normal file
12424
plugins/veg_method/scripts/ACD.py
Normal file
File diff suppressed because it is too large
Load Diff
12424
plugins/veg_method/scripts/AHT.py
Normal file
12424
plugins/veg_method/scripts/AHT.py
Normal file
File diff suppressed because it is too large
Load Diff
12424
plugins/veg_method/scripts/LHBA.py
Normal file
12424
plugins/veg_method/scripts/LHBA.py
Normal file
File diff suppressed because it is too large
Load Diff
12424
plugins/veg_method/scripts/OCD.py
Normal file
12424
plugins/veg_method/scripts/OCD.py
Normal file
File diff suppressed because it is too large
Load Diff
12424
plugins/veg_method/scripts/SH.py
Normal file
12424
plugins/veg_method/scripts/SH.py
Normal file
File diff suppressed because it is too large
Load Diff
690
plugins/veg_method/scripts/__init__.py
Normal file
690
plugins/veg_method/scripts/__init__.py
Normal file
@ -0,0 +1,690 @@
|
||||
from datetime import datetime
|
||||
from osgeo import gdal
|
||||
import math,os
|
||||
import time
|
||||
from PyQt5 import QtWidgets
|
||||
from sklearn.cluster import k_means
|
||||
from rscder.utils.geomath import geo2imageRC, imageRC2geo
|
||||
from rscder.utils.project import Project, PairLayer
|
||||
from misc import Register, AlgFrontend
|
||||
|
||||
VEG_CD = Register('植被变化检测方法')
|
||||
|
||||
import numpy as np
|
||||
from .ACD import ACD
|
||||
from .AHT import AHT
|
||||
from .OCD import OCD
|
||||
from .LHBA import LHBA
|
||||
from .SH import SH
|
||||
|
||||
def warp(file,ds:gdal.Dataset,srcWin=[0,0,0,0]):
|
||||
driver = gdal.GetDriverByName('GTiff')
|
||||
xsize=ds.RasterXSize
|
||||
ysize=ds.RasterYSize
|
||||
geo=ds.GetGeoTransform()
|
||||
orj=ds.GetProjection()
|
||||
band=ds.RasterCount
|
||||
if os.path.exists(file):
|
||||
os.remove(file)
|
||||
out_ds:gdal.Dataset=driver.Create(file, xsize, ysize, band, gdal.GDT_Byte)
|
||||
out_ds.SetGeoTransform(geo)
|
||||
out_ds.SetProjection(orj)
|
||||
for b in range(1,band+1):
|
||||
out_ds.GetRasterBand(b).WriteArray(ds.ReadAsArray(*srcWin,band_list=[b]),*(0,0))
|
||||
del out_ds
|
||||
|
||||
@VEG_CD.register
|
||||
class BasicCD(AlgFrontend):
|
||||
|
||||
@staticmethod
|
||||
def get_name():
|
||||
return '差分法'
|
||||
|
||||
@staticmethod
|
||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message = None,*args, **kargs):
|
||||
|
||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
||||
|
||||
cell_size = layer_parent.cell_size
|
||||
xsize = layer_parent.size[0]
|
||||
ysize = layer_parent.size[1]
|
||||
|
||||
band = ds1.RasterCount
|
||||
yblocks = ysize // cell_size[1]
|
||||
|
||||
driver = gdal.GetDriverByName('GTiff')
|
||||
out_tif = os.path.join(Project().other_path, 'temp.tif')
|
||||
out_ds = driver.Create(out_tif, xsize, ysize, 1, gdal.GDT_Float32)
|
||||
geo=layer_parent.grid.geo
|
||||
proj=layer_parent.grid.proj
|
||||
out_ds.SetGeoTransform(geo)
|
||||
out_ds.SetProjection(proj)
|
||||
|
||||
max_diff = 0
|
||||
min_diff = math.inf
|
||||
|
||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
||||
|
||||
start2x,start2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
||||
|
||||
for j in range(yblocks + 1):#该改这里了
|
||||
if send_message is not None:
|
||||
send_message.emit(f'计算{j}/{yblocks}')
|
||||
block_xy1 = (start1x, start1y+j * cell_size[1])
|
||||
block_xy2 = (start2x,start2y+j*cell_size[1])
|
||||
block_xy=(0,j * cell_size[1])
|
||||
if block_xy1[1] > end1y or block_xy2[1] > end2y:
|
||||
break
|
||||
block_size=(xsize, cell_size[1])
|
||||
block_size1 = (xsize, cell_size[1])
|
||||
block_size2 = (xsize,cell_size[1])
|
||||
if block_xy[1] + block_size[1] > ysize:
|
||||
block_size = (xsize, ysize - block_xy[1])
|
||||
if block_xy1[1] + block_size1[1] > end1y:
|
||||
block_size1 = (xsize,end1y - block_xy1[1])
|
||||
if block_xy2[1] + block_size2[1] > end2y:
|
||||
block_size2 = (xsize, end2y - block_xy2[1])
|
||||
block_data1 = ds1.ReadAsArray(*block_xy1, *block_size1)
|
||||
block_data2 = ds2.ReadAsArray(*block_xy2, *block_size2)
|
||||
|
||||
if band == 1:
|
||||
block_data1 = block_data1[None, ...]
|
||||
block_data2 = block_data2[None, ...]
|
||||
# pdb.set_trace()
|
||||
block_diff = block_data1.sum(0) - block_data2.sum(0)
|
||||
block_diff = block_diff.astype(np.float32)
|
||||
block_diff = np.abs(block_diff)
|
||||
|
||||
min_diff = min(min_diff, block_diff[block_diff > 0].min())
|
||||
max_diff = max(max_diff, block_diff.max())
|
||||
out_ds.GetRasterBand(1).WriteArray(block_diff, *block_xy)
|
||||
if send_message is not None:
|
||||
|
||||
send_message.emit(f'完成{j}/{yblocks}')
|
||||
del ds2
|
||||
del ds1
|
||||
out_ds.FlushCache()
|
||||
del out_ds
|
||||
if send_message is not None:
|
||||
send_message.emit('归一化概率中...')
|
||||
temp_in_ds = gdal.Open(out_tif)
|
||||
|
||||
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(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(geo)
|
||||
out_normal_ds.SetProjection(proj)
|
||||
# hist = np.zeros(256, dtype=np.int32)
|
||||
for j in range(yblocks+1):
|
||||
block_xy = (0, j * cell_size[1])
|
||||
if block_xy[1] > ysize:
|
||||
break
|
||||
block_size = (xsize, cell_size[1])
|
||||
if block_xy[1] + block_size[1] > ysize:
|
||||
block_size = (xsize, ysize - block_xy[1])
|
||||
block_data = temp_in_ds.ReadAsArray(*block_xy, *block_size)
|
||||
block_data = (block_data - min_diff) / (max_diff - min_diff) * 255
|
||||
block_data = block_data.astype(np.uint8)
|
||||
out_normal_ds.GetRasterBand(1).WriteArray(block_data, *block_xy)
|
||||
# hist_t, _ = np.histogram(block_data, bins=256, range=(0, 256))
|
||||
# hist += hist_t
|
||||
# print(hist)
|
||||
del temp_in_ds
|
||||
del out_normal_ds
|
||||
try:
|
||||
os.remove(out_tif)
|
||||
except:
|
||||
pass
|
||||
if send_message is not None:
|
||||
send_message.emit('差分法计算完成')
|
||||
return out_normal_tif
|
||||
|
||||
@VEG_CD.register
|
||||
class LSTS(AlgFrontend):
|
||||
|
||||
@staticmethod
|
||||
def get_name():
|
||||
return 'LSTS'
|
||||
|
||||
@staticmethod
|
||||
def get_widget(parent=None):
|
||||
|
||||
widget = QtWidgets.QWidget(parent)
|
||||
|
||||
return widget
|
||||
|
||||
@staticmethod
|
||||
def get_params(widget=None):
|
||||
return dict(n=5, w_size=(3,3))
|
||||
|
||||
@staticmethod
|
||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message=None,n=5,w_size=(3,3), *args, **kws):
|
||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
||||
|
||||
cell_size = layer_parent.cell_size
|
||||
xsize = layer_parent.size[0]
|
||||
ysize = layer_parent.size[1]
|
||||
|
||||
band = ds1.RasterCount
|
||||
yblocks = ysize // cell_size[1]
|
||||
|
||||
driver = gdal.GetDriverByName('GTiff')
|
||||
out_tif = os.path.join(Project().other_path, '%d.tif'%(int(datetime.now().timestamp() * 1000)))
|
||||
out_ds = driver.Create(out_tif, xsize, ysize, 1, gdal.GDT_Float32)
|
||||
geo=layer_parent.grid.geo
|
||||
proj=layer_parent.grid.proj
|
||||
out_ds.SetGeoTransform(geo)
|
||||
out_ds.SetProjection(proj)
|
||||
pixnum=w_size[0]*w_size[1]
|
||||
# send_message.emit('pixnum:'pixnum)
|
||||
max_diff = 0
|
||||
min_diff = math.inf
|
||||
win_h=w_size[0]//2 #half hight of window
|
||||
win_w=w_size[1]//2 #half width of window
|
||||
a=[[(i+1)**j for j in range(n+1)] for i in range(pixnum)]
|
||||
A=np.array(a).astype(np.float64)#
|
||||
|
||||
k_=np.array(range(1,n+1))
|
||||
df1=np.zeros(pixnum).astype(np.float64)
|
||||
df2=np.zeros(pixnum).astype(np.float64)
|
||||
|
||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
||||
|
||||
start2x,start2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
||||
|
||||
for j in range(yblocks + 1):
|
||||
if send_message is not None:
|
||||
send_message.emit(f'计算{j}/{yblocks}')
|
||||
block_xy1 = (start1x, start1y+j * cell_size[1])
|
||||
block_xy2 = (start2x,start2y+j*cell_size[1])
|
||||
block_xy=(0,j * cell_size[1])
|
||||
if block_xy1[1] > end1y or block_xy2[1] > end2y:
|
||||
break
|
||||
block_size=(xsize, cell_size[1])
|
||||
block_size1 = (xsize, cell_size[1])
|
||||
block_size2 = (xsize,cell_size[1])
|
||||
if block_xy[1] + block_size[1] > ysize:
|
||||
block_size = (xsize, ysize - block_xy[1])
|
||||
if block_xy1[1] + block_size1[1] > end1y:
|
||||
block_size1 = (xsize,end1y - block_xy1[1])
|
||||
if block_xy2[1] + block_size2[1] > end2y:
|
||||
block_size2 = (xsize, end2y - block_xy2[1])
|
||||
block_data1 = ds1.ReadAsArray(*block_xy1, *block_size1)
|
||||
block_data2 = ds2.ReadAsArray(*block_xy2, *block_size2)
|
||||
|
||||
if band == 1:
|
||||
block_data1 = block_data1[None, ...]
|
||||
block_data2 = block_data2[None, ...]
|
||||
# pdb.set_trace()
|
||||
else:
|
||||
block_data1=np.mean(block_data1,0)
|
||||
block_data2=np.mean(block_data2,0)
|
||||
block_diff=np.zeros(block_data1.shape).astype(np.float64)
|
||||
|
||||
for i in range(win_h,block_size1[1]-win_h):
|
||||
for j_ in range(win_w,block_size1[0]-win_w):
|
||||
pix=0
|
||||
|
||||
#get b
|
||||
# b1=block_data[i+win_h:i+win_h] c in range(j_-win_w,j_+win_w+1)
|
||||
b1=block_data1[i-win_h:i+win_h+1,j_-win_w:j_+win_w+1]
|
||||
b2=block_data2[i-win_h:i+win_h+1,j_-win_w:j_+win_w+1]
|
||||
b1=[b if (r+1)//2 else b[::-1] for r,b in enumerate(b1)]
|
||||
b2=[b if (r+1)//2 else b[::-1] for r,b in enumerate(b2)]
|
||||
b1=np.expand_dims(np.concatenate(b1,0),1)
|
||||
b2=np.expand_dims(np.concatenate(b2,0),1)
|
||||
|
||||
x1=np.squeeze(np.linalg.pinv(A).dot(b1))
|
||||
x2=np.squeeze(np.linalg.pinv(A).dot(b2))
|
||||
#df
|
||||
k_=range(1,n+1)
|
||||
for pix in range(1,pixnum+1):
|
||||
df1[pix-1]=x1[1:n+1].dot(np.array([k*(pix**(k-1)) for k in k_]))
|
||||
df2[pix-1]=x2[1:n+1].dot(np.array([k*(pix**(k-1)) for k in k_]))
|
||||
|
||||
#distance 欧式距离
|
||||
block_diff[i][j_]=np.dot(df1-df2,df1-df2)**0.5
|
||||
|
||||
min_diff = min(min_diff, block_diff[block_diff > 0].min())
|
||||
max_diff = max(max_diff, block_diff.max())
|
||||
out_ds.GetRasterBand(1).WriteArray(block_diff, *block_xy)
|
||||
|
||||
send_message.emit(f'完成{j}/{yblocks}')
|
||||
del ds2
|
||||
del ds1
|
||||
out_ds.FlushCache()
|
||||
del out_ds
|
||||
if send_message is not None:
|
||||
send_message.emit('归一化概率中...')
|
||||
temp_in_ds = gdal.Open(out_tif)
|
||||
|
||||
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(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(geo)
|
||||
out_normal_ds.SetProjection(proj)
|
||||
# hist = np.zeros(256, dtype=np.int32)
|
||||
for j in range(yblocks+1):
|
||||
block_xy = (0, j * cell_size[1])
|
||||
if block_xy[1] > ysize:
|
||||
break
|
||||
block_size = (xsize, cell_size[1])
|
||||
if block_xy[1] + block_size[1] > ysize:
|
||||
block_size = (xsize, ysize - block_xy[1])
|
||||
block_data = temp_in_ds.ReadAsArray(*block_xy, *block_size)
|
||||
block_data = (block_data - min_diff) / (max_diff - min_diff) * 255
|
||||
block_data = block_data.astype(np.uint8)
|
||||
out_normal_ds.GetRasterBand(1).WriteArray(block_data, *block_xy)
|
||||
# hist_t, _ = np.histogram(block_data, bins=256, range=(0, 256))
|
||||
# hist += hist_t
|
||||
# print(hist)
|
||||
del temp_in_ds
|
||||
del out_normal_ds
|
||||
try:
|
||||
os.remove(out_tif)
|
||||
except:
|
||||
pass
|
||||
|
||||
if send_message is not None:
|
||||
send_message.emit('LSTS法计算完成')
|
||||
return out_normal_tif
|
||||
|
||||
|
||||
@VEG_CD.register
|
||||
class CVAAlg(AlgFrontend):
|
||||
|
||||
@staticmethod
|
||||
def get_name():
|
||||
return 'CVA'
|
||||
|
||||
@staticmethod
|
||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message = None, *args, **kargs):
|
||||
|
||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
||||
|
||||
cell_size = layer_parent.cell_size
|
||||
xsize = layer_parent.size[0]
|
||||
ysize = layer_parent.size[1]
|
||||
|
||||
band = ds1.RasterCount
|
||||
yblocks = ysize // cell_size[1]
|
||||
|
||||
driver = gdal.GetDriverByName('GTiff')
|
||||
out_tif = os.path.join(Project().other_path, 'temp.tif')
|
||||
out_ds = driver.Create(out_tif, xsize, ysize, 1, gdal.GDT_Float32)
|
||||
geo=layer_parent.grid.geo
|
||||
proj=layer_parent.grid.proj
|
||||
out_ds.SetGeoTransform(geo)
|
||||
out_ds.SetProjection(proj)
|
||||
max_diff = 0
|
||||
min_diff = math.inf
|
||||
|
||||
|
||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
||||
|
||||
start2x,start2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
||||
|
||||
for j in range(yblocks + 1):
|
||||
if send_message is not None:
|
||||
send_message.emit(f'计算{j}/{yblocks}')
|
||||
block_xy1 = (start1x, start1y+j * cell_size[1])
|
||||
block_xy2 = (start2x,start2y+j*cell_size[1])
|
||||
block_xy=(0,j * cell_size[1])
|
||||
if block_xy1[1] > end1y or block_xy2[1] > end2y:
|
||||
break
|
||||
block_size=(xsize, cell_size[1])
|
||||
block_size1 = (xsize, cell_size[1])
|
||||
block_size2 = (xsize,cell_size[1])
|
||||
if block_xy[1] + block_size[1] > ysize:
|
||||
block_size = (xsize, ysize - block_xy[1])
|
||||
if block_xy1[1] + block_size1[1] > end1y:
|
||||
block_size1 = (xsize,end1y - block_xy1[1])
|
||||
if block_xy2[1] + block_size2[1] > end2y:
|
||||
block_size2 = (xsize, end2y - block_xy2[1])
|
||||
block_data1 = ds1.ReadAsArray(*block_xy1, *block_size1)
|
||||
block_data2 = ds2.ReadAsArray(*block_xy2, *block_size2)
|
||||
|
||||
if band == 1:
|
||||
block_data1 = block_data1[None, ...]
|
||||
block_data2 = block_data2[None, ...]
|
||||
# pdb.set_trace()
|
||||
block_diff=np.sum((block_data1-block_data2)**2,0)**0.5
|
||||
min_diff = min(min_diff, block_diff[block_diff > 0].min())
|
||||
max_diff = max(max_diff, block_diff.max())
|
||||
out_ds.GetRasterBand(1).WriteArray(block_diff, *block_xy)
|
||||
if send_message is not None:
|
||||
send_message.emit(f'完成{j}/{yblocks}')
|
||||
del ds2
|
||||
del ds1
|
||||
out_ds.FlushCache()
|
||||
del out_ds
|
||||
if send_message is not None:
|
||||
send_message.emit('归一化概率中...')
|
||||
temp_in_ds = gdal.Open(out_tif)
|
||||
|
||||
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(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(geo)
|
||||
out_normal_ds.SetProjection(proj)
|
||||
# hist = np.zeros(256, dtype=np.int32)
|
||||
for j in range(yblocks+1):
|
||||
block_xy = (0, j * cell_size[1])
|
||||
if block_xy[1] > ysize:
|
||||
break
|
||||
block_size = (xsize, cell_size[1])
|
||||
if block_xy[1] + block_size[1] > ysize:
|
||||
block_size = (xsize, ysize - block_xy[1])
|
||||
block_data = temp_in_ds.ReadAsArray(*block_xy, *block_size)
|
||||
block_data = (block_data - min_diff) / (max_diff - min_diff) * 255
|
||||
block_data = block_data.astype(np.uint8)
|
||||
out_normal_ds.GetRasterBand(1).WriteArray(block_data, *block_xy)
|
||||
# hist_t, _ = np.histogram(block_data, bins=256, range=(0, 256))
|
||||
# hist += hist_t
|
||||
# print(hist)
|
||||
del temp_in_ds
|
||||
del out_normal_ds
|
||||
try:
|
||||
os.remove(out_tif)
|
||||
except:
|
||||
pass
|
||||
if send_message is not None:
|
||||
send_message.emit('欧式距离计算完成')
|
||||
return out_normal_tif
|
||||
|
||||
@VEG_CD.register
|
||||
class ACDAlg(AlgFrontend):
|
||||
|
||||
@staticmethod
|
||||
def get_name():
|
||||
return 'ACD'
|
||||
|
||||
@staticmethod
|
||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message = None, *args, **kargs):
|
||||
|
||||
if send_message is None:
|
||||
class Empty:
|
||||
|
||||
def emit(self, *args, **kws):
|
||||
print(args)
|
||||
send_message = Empty()
|
||||
# send_message.emit = print
|
||||
|
||||
xsize = layer_parent.size[0]
|
||||
ysize = layer_parent.size[1]
|
||||
geo=layer_parent.grid.geo
|
||||
proj=layer_parent.grid.proj
|
||||
#提取公共部分
|
||||
send_message.emit('提取重叠区域数据.....')
|
||||
|
||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
||||
temp_tif2 = os.path.join(Project().other_path,'temp2.tif')
|
||||
start2x,start2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
||||
warp(temp_tif2,ds2,srcWin=[start2x,start2y,xsize,ysize])
|
||||
del ds2
|
||||
send_message.emit('图像二提取完成')
|
||||
|
||||
|
||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
||||
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
||||
warp(temp_tif1,ds1,srcWin=[start1x,start1y,xsize,ysize])
|
||||
del ds1
|
||||
send_message.emit('图像一提取完成')
|
||||
|
||||
|
||||
|
||||
#运算
|
||||
send_message.emit('开始ACD计算.....')
|
||||
time.sleep(0.1)
|
||||
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(layer_parent.name, int(np.random.rand() * 100000)))
|
||||
ACD(temp_tif1,temp_tif2,out_normal_tif)
|
||||
#添加投影
|
||||
send_message.emit('录入投影信息.....')
|
||||
time.sleep(0.1)
|
||||
ds=gdal.Open(out_normal_tif,1)
|
||||
ds.SetGeoTransform(geo)
|
||||
ds.SetProjection(proj)
|
||||
del ds
|
||||
|
||||
return out_normal_tif
|
||||
|
||||
|
||||
@VEG_CD.register
|
||||
class AHTAlg(AlgFrontend):
|
||||
|
||||
@staticmethod
|
||||
def get_name():
|
||||
return 'AHT'
|
||||
|
||||
@staticmethod
|
||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message = None, *args, **kargs):
|
||||
|
||||
if send_message is None:
|
||||
class Empty:
|
||||
|
||||
def emit(self, *args, **kws):
|
||||
print(args)
|
||||
send_message = Empty()
|
||||
|
||||
xsize = layer_parent.size[0]
|
||||
ysize = layer_parent.size[1]
|
||||
geo=layer_parent.grid.geo
|
||||
proj=layer_parent.grid.proj
|
||||
#提取公共部分
|
||||
send_message.emit('提取重叠区域数据.....')
|
||||
|
||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
||||
temp_tif2 = os.path.join(Project().other_path,'temp2.tif')
|
||||
start2x,start2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
||||
warp(temp_tif2,ds2,srcWin=[start2x,start2y,xsize,ysize])
|
||||
del ds2
|
||||
send_message.emit('图像二提取完成')
|
||||
|
||||
|
||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
||||
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
||||
warp(temp_tif1,ds1,srcWin=[start1x,start1y,xsize,ysize])
|
||||
del ds1
|
||||
send_message.emit('图像一提取完成')
|
||||
|
||||
|
||||
|
||||
#运算
|
||||
send_message.emit('开始AHT计算.....')
|
||||
time.sleep(0.1)
|
||||
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(layer_parent.name, int(np.random.rand() * 100000)))
|
||||
AHT(temp_tif1,temp_tif2,out_normal_tif)
|
||||
#添加投影
|
||||
send_message.emit('录入投影信息.....')
|
||||
time.sleep(0.1)
|
||||
ds=gdal.Open(out_normal_tif,1)
|
||||
ds.SetGeoTransform(geo)
|
||||
ds.SetProjection(proj)
|
||||
del ds
|
||||
|
||||
return out_normal_tif
|
||||
|
||||
|
||||
@VEG_CD.register
|
||||
class OCDAlg(AlgFrontend):
|
||||
|
||||
@staticmethod
|
||||
def get_name():
|
||||
return 'OCD'
|
||||
|
||||
@staticmethod
|
||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message = None, *args, **kargs):
|
||||
|
||||
if send_message is None:
|
||||
class Empty:
|
||||
|
||||
def emit(self, *args, **kws):
|
||||
print(args)
|
||||
send_message = Empty()
|
||||
|
||||
xsize = layer_parent.size[0]
|
||||
ysize = layer_parent.size[1]
|
||||
geo=layer_parent.grid.geo
|
||||
proj=layer_parent.grid.proj
|
||||
#提取公共部分
|
||||
send_message.emit('提取重叠区域数据.....')
|
||||
|
||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
||||
temp_tif2 = os.path.join(Project().other_path,'temp2.tif')
|
||||
start2x,start2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
||||
warp(temp_tif2,ds2,srcWin=[start2x,start2y,xsize,ysize])
|
||||
del ds2
|
||||
send_message.emit('图像二提取完成')
|
||||
|
||||
|
||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
||||
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
||||
warp(temp_tif1,ds1,srcWin=[start1x,start1y,xsize,ysize])
|
||||
del ds1
|
||||
send_message.emit('图像一提取完成')
|
||||
|
||||
|
||||
|
||||
#运算
|
||||
send_message.emit('开始OCD计算.....')
|
||||
time.sleep(0.1)
|
||||
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(layer_parent.name, int(np.random.rand() * 100000)))
|
||||
OCD(temp_tif1,temp_tif2,out_normal_tif,Project().other_path)
|
||||
#添加投影
|
||||
send_message.emit('录入投影信息.....')
|
||||
time.sleep(0.1)
|
||||
ds=gdal.Open(out_normal_tif,1)
|
||||
ds.SetGeoTransform(geo)
|
||||
ds.SetProjection(proj)
|
||||
del ds
|
||||
|
||||
return out_normal_tif
|
||||
|
||||
@VEG_CD.register
|
||||
class LHBAAlg(AlgFrontend):
|
||||
|
||||
@staticmethod
|
||||
def get_name():
|
||||
return 'LHBA'
|
||||
|
||||
@staticmethod
|
||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message = None, *args, **kargs):
|
||||
|
||||
if send_message is None:
|
||||
class Empty:
|
||||
|
||||
def emit(self, *args, **kws):
|
||||
print(args)
|
||||
send_message = Empty()
|
||||
|
||||
|
||||
xsize = layer_parent.size[0]
|
||||
ysize = layer_parent.size[1]
|
||||
geo=layer_parent.grid.geo
|
||||
proj=layer_parent.grid.proj
|
||||
#提取公共部分
|
||||
send_message.emit('提取重叠区域数据.....')
|
||||
|
||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
||||
temp_tif2 = os.path.join(Project().other_path,'temp2.tif')
|
||||
start2x,start2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
||||
warp(temp_tif2,ds2,srcWin=[start2x,start2y,xsize,ysize])
|
||||
del ds2
|
||||
send_message.emit('图像二提取完成')
|
||||
|
||||
|
||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
||||
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
||||
warp(temp_tif1,ds1,srcWin=[start1x,start1y,xsize,ysize])
|
||||
del ds1
|
||||
send_message.emit('图像一提取完成')
|
||||
|
||||
#运算
|
||||
send_message.emit('开始LHBA计算.....')
|
||||
time.sleep(0.1)
|
||||
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(layer_parent.name, int(np.random.rand() * 100000)))
|
||||
LHBA(temp_tif1,temp_tif2,out_normal_tif)
|
||||
#添加投影
|
||||
send_message.emit('录入投影信息.....')
|
||||
time.sleep(0.1)
|
||||
ds=gdal.Open(out_normal_tif,1)
|
||||
ds.SetGeoTransform(geo)
|
||||
ds.SetProjection(proj)
|
||||
del ds
|
||||
return out_normal_tif
|
||||
|
||||
|
||||
@VEG_CD.register
|
||||
class SHAlg(AlgFrontend):
|
||||
|
||||
@staticmethod
|
||||
def get_name():
|
||||
return 'SH'
|
||||
|
||||
@staticmethod
|
||||
def run_alg(pth1:str,pth2:str,layer_parent:PairLayer,send_message = None, *args, **kargs):
|
||||
|
||||
if send_message is None:
|
||||
class Empty:
|
||||
|
||||
def emit(self, *args, **kws):
|
||||
print(args)
|
||||
send_message = Empty()
|
||||
|
||||
|
||||
|
||||
xsize = layer_parent.size[0]
|
||||
ysize = layer_parent.size[1]
|
||||
geo=layer_parent.grid.geo
|
||||
proj=layer_parent.grid.proj
|
||||
#提取公共部分
|
||||
send_message.emit('提取重叠区域数据.....')
|
||||
|
||||
ds2:gdal.Dataset=gdal.Open(pth2)
|
||||
temp_tif2 = os.path.join(Project().other_path,'temp2.tif')
|
||||
start2x,start2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
||||
end2x,end2y=geo2imageRC(ds2.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
||||
warp(temp_tif2,ds2,srcWin=[start2x,start2y,xsize,ysize])
|
||||
del ds2
|
||||
send_message.emit('图像二提取完成')
|
||||
|
||||
|
||||
ds1:gdal.Dataset=gdal.Open(pth1)
|
||||
temp_tif1 = os.path.join(Project().other_path, 'temp1.tif')
|
||||
start1x,start1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[0],layer_parent.mask.xy[1])
|
||||
end1x,end1y=geo2imageRC(ds1.GetGeoTransform(),layer_parent.mask.xy[2],layer_parent.mask.xy[3])
|
||||
warp(temp_tif1,ds1,srcWin=[start1x,start1y,xsize,ysize])
|
||||
del ds1
|
||||
send_message.emit('图像一提取完成')
|
||||
|
||||
#运算
|
||||
send_message.emit('开始SH计算.....')
|
||||
time.sleep(0.1)
|
||||
out_normal_tif = os.path.join(Project().cmi_path, '{}_{}_cmi.tif'.format(layer_parent.name, int(np.random.rand() * 100000)))
|
||||
SH(temp_tif1,temp_tif2,out_normal_tif)
|
||||
#添加投影
|
||||
send_message.emit('录入投影信息.....')
|
||||
time.sleep(0.1)
|
||||
ds=gdal.Open(out_normal_tif,1)
|
||||
ds.SetGeoTransform(geo)
|
||||
ds.SetProjection(proj)
|
||||
del ds
|
||||
return out_normal_tif
|
Loading…
x
Reference in New Issue
Block a user