Skip to content

Commit 5754655

Browse files
7.6.3
1 parent cca065c commit 5754655

20 files changed

Lines changed: 24201 additions & 24192 deletions

__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def description():
4242

4343

4444
def version():
45-
return 'Version 7.6.2 - Matera'
45+
return 'Version 7.6.3 - Matera'
4646

4747

4848
def icon():

core/utils.py

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6649,14 +6649,11 @@ def layerSource(self, layer):
66496649

66506650
# save memory layer to shapefile
66516651
def saveMemoryLayerToShapefile(self, memoryLayer, output, name = None, format = 'ESRI Shapefile', IDList = None, listFieldName = None):
6652-
if format != 'ESRI Shapefile':
6653-
shpF = cfg.utls.createTempRasterPath('shp')
6652+
shpF = output
6653+
if format == 'ESRI Shapefile':
6654+
cfg.utls.createSCPShapefile(memoryLayer.crs(), shpF)
66546655
else:
6655-
shpF = output
6656-
# create shapefile
6657-
dp = memoryLayer.dataProvider()
6658-
fds = dp.fields()
6659-
cfg.qgisCoreSCP.QgsVectorFileWriter(str(shpF), 'CP1250', fds, cfg.qgisCoreSCP.QgsWkbTypes.MultiPolygon , memoryLayer.crs(), 'ESRI Shapefile')
6656+
cfg.utls.createSCPVector(memoryLayer.crs(), shpF, format = format)
66606657
if name is None:
66616658
name = cfg.utls.fileName(shpF)
66626659
tSS = cfg.utls.addVectorLayer(shpF, name, 'ogr')
@@ -6674,9 +6671,6 @@ def saveMemoryLayerToShapefile(self, memoryLayer, output, name = None, format =
66746671
tSS.commitChanges()
66756672
tSS.dataProvider().createSpatialIndex()
66766673
tSS.updateExtents()
6677-
if format != 'ESRI Shapefile':
6678-
v = cfg.utls.mergeAllLayers([shpF], output)
6679-
tSS = cfg.utls.addVectorLayer(output)
66806674
return tSS
66816675

66826676
# save features to shapefile
@@ -7747,7 +7741,7 @@ def mergeAllLayers(self, inputLayersList, targetLayer):
77477741
oF = cfg.ogrSCP.Feature(oLDefn)
77487742
oF.SetGeometry(g)
77497743
for i in range(0, oLFcount):
7750-
nmRef = oLDefn.GetFieldDefn(i).GetNameRef()
7744+
nmRef = iLDefn.GetFieldDefn(i).GetNameRef()
77517745
field = iF.GetField(i)
77527746
oF.SetField(nmRef, field)
77537747
oL.CreateFeature(oF)
@@ -7876,6 +7870,8 @@ def createSCPShapefile(self, crsWkt, outputVector):
78767870
sR.ImportFromWkt(crsWkt)
78777871
nm = cfg.utls.fileNameNoExt(outputVector)
78787872
rL = dS.CreateLayer(nm, sR, cfg.ogrSCP.wkbMultiPolygon)
7873+
fd0 = cfg.ogrSCP.FieldDefn('fid', cfg.ogrSCP.OFTInteger)
7874+
rL.CreateField(fd0)
78797875
fd1 = cfg.ogrSCP.FieldDefn(cfg.fldMacroID_class, cfg.ogrSCP.OFTInteger)
78807876
rL.CreateField(fd1)
78817877
fd2 = cfg.ogrSCP.FieldDefn(cfg.fldROIMC_info, cfg.ogrSCP.OFTString)
@@ -7892,14 +7888,14 @@ def createSCPShapefile(self, crsWkt, outputVector):
78927888
cfg.utls.logCondition(str(__name__) + '-' + (cfg.inspectSCP.stack()[0][3])+ ' ' + cfg.utls.lineOfCode(), 'outputVector: ' + str(outputVector))
78937889

78947890
# create a polygon gpkg with OGR
7895-
def createSCPVector(self, crsWkt, outputVector):
7891+
def createSCPVector(self, crsWkt, outputVector, format = 'GPKG'):
78967892
try:
78977893
crsWkt = str(crsWkt.toWkt())
78987894
except:
78997895
pass
79007896
# logger
79017897
cfg.utls.logCondition(str(__name__) + '-' + (cfg.inspectSCP.stack()[0][3])+ ' ' + cfg.utls.lineOfCode(), 'crsWkt: ' + str(crsWkt))
7902-
d = cfg.ogrSCP.GetDriverByName('GPKG')
7898+
d = cfg.ogrSCP.GetDriverByName(format)
79037899
dS = d.CreateDataSource(outputVector)
79047900
# shapefile
79057901
sR = cfg.osrSCP.SpatialReference()

dock/scpdock.py

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1089,6 +1089,14 @@ def deleteSignatureByID(self, id):
10891089
cfg.signList.pop('MD_THRESHOLD_' + str(id))
10901090
cfg.signList.pop('ML_THRESHOLD_' + str(id))
10911091
cfg.signList.pop('SAM_THRESHOLD_' + str(id))
1092+
try:
1093+
cfg.signList.pop('CHECKBOX' + str(id))
1094+
except:
1095+
pass
1096+
try:
1097+
cfg.signList.pop('LCS_ROW' + str(id))
1098+
except:
1099+
pass
10921100
try:
10931101
cfg.scaPlT.removeScatterByID(id)
10941102
cfg.scaPlT.scatterPlotListTable(cfg.uiscp.scatter_list_plot_tableWidget)
@@ -1183,6 +1191,8 @@ def getROIAttributes(self, layer):
11831191
cfg.ROI_Count = {}
11841192
cfg.ROI_ShapeID = {}
11851193
cfg.ROI_SCP_UID = {}
1194+
cfg.treeDockItm = {}
1195+
cfg.treeDockMCItm = {}
11861196
if l is not None:
11871197
i = 0
11881198
for f in l.getFeatures():
@@ -1446,31 +1456,31 @@ def ROIListTableTree(self, layer, tree, checkstate=0):
14461456
# ROIs
14471457
for k in sorted(cfg.ROI_SCP_UID.values()):
14481458
if str(k) in list(cfg.signIDs.values()):
1449-
cfg.SCPD.addChildTreeItem(l, [int(cfg.ROI_MC_ID[k]), str(cfg.ROI_MC_Info[k]), int(cfg.ROI_C_ID[k]), str(cfg.ROI_C_Info[k]), cfg.ROISigTypeNm, k], checkboxState = cfg.signList['CHECKBOX_' + str(k)], color = cfg.signList['COLOR_' + str(k)])
1459+
cfg.SCPD.addChildTreeItem(l, [int(float(cfg.ROI_MC_ID[k])), str(cfg.ROI_MC_Info[k]), int(float(cfg.ROI_C_ID[k])), str(cfg.ROI_C_Info[k]), cfg.ROISigTypeNm, k], checkboxState = cfg.signList['CHECKBOX_' + str(k)], color = cfg.signList['COLOR_' + str(k)])
14501460
# for signature list coherence
14511461
try:
1452-
cfg.signList['MACROCLASSID_' + str(k)] = int(cfg.ROI_MC_ID[k])
1462+
cfg.signList['MACROCLASSID_' + str(k)] = int(float(cfg.ROI_MC_ID[k]))
14531463
except:
14541464
cfg.signList['MACROCLASSID_' + str(k)] = int(0)
14551465
cfg.signList['MACROCLASSINFO_' + str(k)] = str(cfg.ROI_MC_Info[k])
14561466
try:
1457-
cfg.signList['CLASSID_' + str(k)] = int(cfg.ROI_C_ID[k])
1467+
cfg.signList['CLASSID_' + str(k)] = int(float(cfg.ROI_C_ID[k]))
14581468
except:
14591469
cfg.signList['CLASSID_' + str(k)] = int(0)
14601470
cfg.signList['CLASSINFO_' + str(k)] = str(cfg.ROI_C_Info[k])
14611471
else:
14621472
try:
1463-
cfg.SCPD.addChildTreeItem(l, [int(cfg.ROI_MC_ID[k]), str(cfg.ROI_MC_Info[k]), int(cfg.ROI_C_ID[k]), str(cfg.ROI_C_Info[k]), cfg.ROITypeNm, k], checkboxState = cfg.signList['CHECKBOX_' + str(k)])
1473+
cfg.SCPD.addChildTreeItem(l, [int(float(cfg.ROI_MC_ID[k])), str(cfg.ROI_MC_Info[k]), int(float(cfg.ROI_C_ID[k])), str(cfg.ROI_C_Info[k]), cfg.ROITypeNm, k], checkboxState = cfg.signList['CHECKBOX_' + str(k)])
14641474
except:
1465-
cfg.SCPD.addChildTreeItem(l, [int(cfg.ROI_MC_ID[k]), str(cfg.ROI_MC_Info[k]), int(cfg.ROI_C_ID[k]), str(cfg.ROI_C_Info[k]), cfg.ROITypeNm, k], checkboxState = cfg.QtSCP.Checked)
1475+
cfg.SCPD.addChildTreeItem(l, [int(float(cfg.ROI_MC_ID[k])), str(cfg.ROI_MC_Info[k]), int(float(cfg.ROI_C_ID[k])), str(cfg.ROI_C_Info[k]), cfg.ROITypeNm, k], checkboxState = cfg.QtSCP.Checked)
14661476
# for signature list coherence
14671477
try:
1468-
cfg.signList['MACROCLASSID_' + str(k)] = int(cfg.ROI_MC_ID[k])
1478+
cfg.signList['MACROCLASSID_' + str(k)] = int(float(cfg.ROI_MC_ID[k]))
14691479
except:
14701480
cfg.signList['MACROCLASSID_' + str(k)] = int(0)
14711481
cfg.signList['MACROCLASSINFO_' + str(k)] = str(cfg.ROI_MC_Info[k])
14721482
try:
1473-
cfg.signList['CLASSID_' + str(k)] = int(cfg.ROI_C_ID[k])
1483+
cfg.signList['CLASSID_' + str(k)] = int(float(cfg.ROI_C_ID[k]))
14741484
except:
14751485
cfg.signList['CLASSID_' + str(k)] = int(0)
14761486
cfg.signList['CLASSINFO_' + str(k)] = str(cfg.ROI_C_Info[k])

docs/repository.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<?xml version = '1.0' encoding = 'UTF-8'?>
22
<plugins>
3-
<pyqgis_plugin name="Semi-Automatic Classification Plugin - master" version="7.6.2" plugin_id="284">
3+
<pyqgis_plugin name="Semi-Automatic Classification Plugin - master" version="7.6.3" plugin_id="284">
44
<description><![CDATA[The Semi-Automatic Classification Plugin (SCP) allows for the supervised classification of remote sensing images, providing tools for the download, the preprocessing and postprocessing of images.]]></description>
55
<about><![CDATA[Developed by Luca Congedo, the Semi-Automatic Classification Plugin (SCP) allows for the supervised classification of remote sensing images, providing tools for the download, the preprocessing and postprocessing of images. Search and download is available for ASTER, GOES, Landsat, MODIS, Sentinel-1, Sentinel-2, and Sentinel-3 images. Several algorithms are available for the land cover classification. This plugin requires the installation of GDAL, OGR, Numpy, SciPy, and Matplotlib. Some tools require also the installation of SNAP (ESA Sentinel Application Platform). For more information please visit https://fromgistors.blogspot.com .]]></about>
6-
<version>7.6.2</version>
6+
<version>7.6.3</version>
77
<qgis_minimum_version>3.0.0</qgis_minimum_version>
88
<qgis_maximum_version>3.99.0</qgis_maximum_version>
99
<homepage><![CDATA[https://fromgistors.blogspot.com/p/semi-automatic-classification-plugin.html]]></homepage>

0 commit comments

Comments
 (0)