Skip to content

Commit 9c487fa

Browse files
author
cfarmer
committed
udpate to fTools basics stats plugin, patch thanks to Alexander Bruy
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@12051 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 61de96c commit 9c487fa

File tree

2 files changed

+74
-40
lines changed

2 files changed

+74
-40
lines changed

python/plugins/fTools/tools/doVisual.py

+54-32
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,12 @@ def keyPressEvent( self, e ):
2424
if ( e.modifiers() == Qt.ControlModifier or e.modifiers() == Qt.MetaModifier ) and e.key() == Qt.Key_C:
2525
selection = self.lstUnique.selectedItems()
2626
items = QString()
27-
for item in selection:
28-
items.append( item.text() + "\n" )
27+
if self.myFunction in ( 1, 2 ):
28+
for rec in range( self.tblUnique.rowCount() ):
29+
items.append( self.tblUnique.item( rec, 0 ).text() + "\n" )
30+
else:
31+
for rec in range( self.tblUnique.rowCount() ):
32+
items.append( self.tblUnique.item( rec, 0 ).text() + ":" + self.tblUnique.item( rec, 1 ).text() + "\n" )
2933
if not items.isEmpty():
3034
clip_board = QApplication.clipboard()
3135
clip_board.setText( items )
@@ -46,12 +50,7 @@ def update( self ):
4650
self.useSelected.setCheckState( Qt.Unchecked )
4751
# add all fields in combobox because now we can work with text fields too
4852
for i in changedField:
49-
if self.myFunction == 3:
50-
# if changedField[i].type() == QVariant.Int or changedField[i].type() == QVariant.Double:
51-
self.cmbField.addItem( unicode( changedField[i].name() ) )
52-
else:
53-
self.cmbField.addItem( unicode( changedField[i].name() ) )
54-
# self.cmbField.addItem( unicode( changedField[i].name() ) )
53+
self.cmbField.addItem( unicode( changedField[i].name() ) )
5554

5655
def accept( self ):
5756
if self.inShape.currentText() == "":
@@ -105,7 +104,8 @@ def manageGui( self ):
105104
#4: Nearest neighbour analysis
106105
def visual( self, myLayer, myField, mySelection ):
107106
vlayer = ftools_utils.getVectorLayerByName( myLayer )
108-
self.lstUnique.clear()
107+
self.tblUnique.clearContents()
108+
self.tblUnique.setRowCount( 0 )
109109
self.lstCount.clear()
110110
self.testThread = visualThread( self.iface.mainWindow(), self, self.myFunction, vlayer, myField, mySelection )
111111
QObject.connect( self.testThread, SIGNAL( "runFinished(PyQt_PyObject)" ), self.runFinishedFromThread )
@@ -121,7 +121,29 @@ def cancelThread( self ):
121121

122122
def runFinishedFromThread( self, output ):
123123
self.testThread.stop()
124-
self.lstUnique.addItems( output[ 0 ] )
124+
125+
result = output[ 0 ]
126+
numRows = len( result )
127+
self.tblUnique.setRowCount( numRows )
128+
if self.myFunction in ( 1, 2 ):
129+
self.tblUnique.setColumnCount( 1 )
130+
for rec in range( numRows ):
131+
item = QTableWidgetItem( result[ rec ] )
132+
self.tblUnique.setItem( rec, 0, item )
133+
else:
134+
self.tblUnique.setColumnCount( 2 )
135+
for rec in range( numRows ):
136+
tmp = result[ rec ].split( ":" )
137+
item = QTableWidgetItem( tmp[ 0 ] )
138+
self.tblUnique.setItem( rec, 0, item )
139+
item = QTableWidgetItem( tmp[ 1 ] )
140+
self.tblUnique.setItem( rec, 1, item )
141+
self.tblUnique.setHorizontalHeaderLabels( [ "Parameter", "Value" ] )
142+
self.tblUnique.horizontalHeader().setResizeMode( 1, QHeaderView.ResizeToContents )
143+
self.tblUnique.horizontalHeader().show()
144+
self.tblUnique.horizontalHeader().setResizeMode( 0, QHeaderView.Stretch )
145+
self.tblUnique.resizeRowsToContents()
146+
125147
self.lstCount.insert( unicode( output[ 1 ] ) )
126148
self.cancel_close.setText( "Close" )
127149
QObject.disconnect( self.cancel_close, SIGNAL( "clicked()" ), self.cancelThread )
@@ -246,12 +268,12 @@ def basic_statistics( self, vlayer, myField ):
246268
if nVal > 0.00:
247269
meanVal = sumVal / nVal
248270
lstStats = []
249-
lstStats.append( self.tr( "Max. len: " ) + " " + unicode( maxVal ) )
250-
lstStats.append( self.tr( "Min. len: " ) + " " + unicode( minVal ) )
251-
lstStats.append( self.tr( "Mean. len: " ) + " " + unicode( meanVal ) )
252-
lstStats.append( self.tr( "Filled: " ) + " " + unicode( fillVal ) )
253-
lstStats.append( self.tr( "Empty: " ) + " " + unicode( emptyVal ) )
254-
lstStats.append( self.tr( "N: " ) + " " + unicode( nVal ) )
271+
lstStats.append( self.tr( "Max. len:" ) + unicode( maxVal ) )
272+
lstStats.append( self.tr( "Min. len:" ) + unicode( minVal ) )
273+
lstStats.append( self.tr( "Mean. len:" ) + unicode( meanVal ) )
274+
lstStats.append( self.tr( "Filled:" ) + unicode( fillVal ) )
275+
lstStats.append( self.tr( "Empty:" ) + unicode( emptyVal ) )
276+
lstStats.append( self.tr( "N:" ) + unicode( nVal ) )
255277
return ( lstStats, [] )
256278
else: # numeric field
257279
stdVal = 0
@@ -261,7 +283,7 @@ def basic_statistics( self, vlayer, myField ):
261283
if self.mySelection: # only selected features
262284
selection = vlayer.selectedFeatures()
263285
nFeat = vlayer.selectedFeatureCount()
264-
uniqueVal = utils.getUniqueValuesCount( vlayer, index, True )
286+
uniqueVal = ftools_utils.getUniqueValuesCount( vlayer, index, True )
265287
self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), 0 )
266288
self.emit( SIGNAL( "runRange(PyQt_PyObject)" ), ( 0, nFeat ) )
267289
for f in selection:
@@ -314,16 +336,16 @@ def basic_statistics( self, vlayer, myField ):
314336
else:
315337
medianVal = lstVal[ ( nVal + 1 ) / 2 ]
316338
lstStats = []
317-
lstStats.append( self.tr( "Mean: " ) + " " + unicode( meanVal ) )
318-
lstStats.append( self.tr( "StdDev: " ) + " " + unicode( stdVal ) )
319-
lstStats.append( self.tr( "Sum: " ) + " " + unicode( sumVal) )
320-
lstStats.append( self.tr( "Min: " ) + " " + unicode( minVal ) )
321-
lstStats.append( self.tr( "Max: " ) + " " + unicode( maxVal ) )
322-
lstStats.append( self.tr( "N: " ) + " " + unicode( nVal ) )
323-
lstStats.append( self.tr( "CV: " ) + " " + unicode( cvVal ) )
324-
lstStats.append( self.tr( "Number of unique values: " ) + " " + unicode( uniqueVal ) )
325-
lstStats.append( self.tr( "Range: " ) + " " + unicode( rangeVal ) )
326-
lstStats.append( self.tr( "Median: " ) + " " + unicode( medianVal ) )
339+
lstStats.append( self.tr( "Mean:" ) + unicode( meanVal ) )
340+
lstStats.append( self.tr( "StdDev:" ) + unicode( stdVal ) )
341+
lstStats.append( self.tr( "Sum:" ) + unicode( sumVal) )
342+
lstStats.append( self.tr( "Min:" ) + unicode( minVal ) )
343+
lstStats.append( self.tr( "Max:" ) + unicode( maxVal ) )
344+
lstStats.append( self.tr( "N:" ) + unicode( nVal ) )
345+
lstStats.append( self.tr( "CV:" ) + unicode( cvVal ) )
346+
lstStats.append( self.tr( "Number of unique values:" ) + unicode( uniqueVal ) )
347+
lstStats.append( self.tr( "Range:" ) + unicode( rangeVal ) )
348+
lstStats.append( self.tr( "Median:" ) + unicode( medianVal ) )
327349
return ( lstStats, [] )
328350

329351
def nearest_neighbour_analysis( self, vlayer ):
@@ -356,11 +378,11 @@ def nearest_neighbour_analysis( self, vlayer ):
356378
SE = float( 0.26136 / math.sqrt( ( nVal * nVal ) / A ) )
357379
zscore = float( ( do - de ) / SE )
358380
lstStats = []
359-
lstStats.append( self.tr( "Observed mean distance : " ) + " " + unicode( do ) )
360-
lstStats.append( self.tr( "Expected mean distance : " ) + " " + unicode( de ) )
361-
lstStats.append( self.tr( "Nearest neighbour index : " ) + " " + unicode( d ) )
362-
lstStats.append( "N : " + unicode( nVal ) )
363-
lstStats.append( "Z-Score : " + unicode( zscore ) )
381+
lstStats.append( self.tr( "Observed mean distance:" ) + unicode( do ) )
382+
lstStats.append( self.tr( "Expected mean distance:" ) + unicode( de ) )
383+
lstStats.append( self.tr( "Nearest neighbour index:" ) + unicode( d ) )
384+
lstStats.append( self.tr( "N:" ) + unicode( nVal ) )
385+
lstStats.append( self.tr( "Z-Score:" ) + unicode( zscore ) )
364386
return ( lstStats, [] )
365387

366388
def check_geometry( self, vlayer ):

python/plugins/fTools/tools/frmVisual.ui

+20-8
Original file line numberDiff line numberDiff line change
@@ -58,28 +58,40 @@
5858
</widget>
5959
</item>
6060
<item>
61-
<widget class="QListWidget" name="lstUnique">
61+
<widget class="QTableWidget" name="tblUnique">
6262
<property name="editTriggers">
6363
<set>QAbstractItemView::NoEditTriggers</set>
6464
</property>
65+
<property name="tabKeyNavigation">
66+
<bool>false</bool>
67+
</property>
6568
<property name="showDropIndicator" stdset="0">
6669
<bool>false</bool>
6770
</property>
71+
<property name="dragDropOverwriteMode">
72+
<bool>false</bool>
73+
</property>
6874
<property name="alternatingRowColors">
6975
<bool>true</bool>
7076
</property>
7177
<property name="selectionMode">
72-
<enum>QAbstractItemView::ExtendedSelection</enum>
78+
<enum>QAbstractItemView::NoSelection</enum>
7379
</property>
74-
<property name="selectionBehavior">
75-
<enum>QAbstractItemView::SelectRows</enum>
80+
<property name="showGrid">
81+
<bool>false</bool>
7682
</property>
77-
<property name="selectionRectVisible">
78-
<bool>true</bool>
83+
<property name="wordWrap">
84+
<bool>false</bool>
7985
</property>
80-
<property name="sortingEnabled">
81-
<bool>true</bool>
86+
<property name="cornerButtonEnabled">
87+
<bool>false</bool>
8288
</property>
89+
<attribute name="horizontalHeaderVisible">
90+
<bool>false</bool>
91+
</attribute>
92+
<attribute name="verticalHeaderVisible">
93+
<bool>false</bool>
94+
</attribute>
8395
</widget>
8496
</item>
8597
</layout>

0 commit comments

Comments
 (0)