Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Added asWktPolygon method to QgsRectangle with a unit test. Discovere…
…d QgsRectangle tests were missing their main method causing them to not run. Then discovered that some of these tests fail, one of which remains unresolved.
  • Loading branch information
timlinux committed Sep 10, 2012
1 parent 847cae9 commit 9b0fee3
Show file tree
Hide file tree
Showing 8 changed files with 153 additions and 12 deletions.
3 changes: 3 additions & 0 deletions python/core/qgsrectangle.sip
Expand Up @@ -76,6 +76,9 @@ class QgsRectangle
bool isEmpty() const;
//! returns string representation in Wkt form
QString asWktCoordinates() const;
//! returns string representation as WKT Polygon
//@note added om 2.0
QString asWktPolygon() const;
//! returns string representation of form xmin,ymin xmax,ymax
QString toString(bool automaticPrecision = false) const;
//! overloaded toString that allows precision of numbers to be set
Expand Down
19 changes: 19 additions & 0 deletions src/core/qgsrectangle.cpp
Expand Up @@ -184,6 +184,25 @@ QString QgsRectangle::asWktCoordinates() const
return rep;
}

QString QgsRectangle::asWktPolygon() const
{
QString rep =
QString("POLYGON((") +
QString::number( xmin, 'f', 16 ) + " " +
QString::number( ymin, 'f', 16 ) + ", " +
QString::number( xmax, 'f', 16 ) + " " +
QString::number( ymin, 'f', 16 ) + ", " +
QString::number( xmax, 'f', 16 ) + " " +
QString::number( ymax, 'f', 16 ) + ", " +
QString::number( xmin, 'f', 16 ) + " " +
QString::number( ymax, 'f', 16 ) + ", " +
QString::number( xmin, 'f', 16 ) + " " +
QString::number( ymin, 'f', 16 ) +
QString("))");

return rep;
}

// Return a string representation of the rectangle with automatic or high precision
QString QgsRectangle::toString( bool automaticPrecision ) const
{
Expand Down
3 changes: 3 additions & 0 deletions src/core/qgsrectangle.h
Expand Up @@ -97,6 +97,9 @@ class CORE_EXPORT QgsRectangle
bool isEmpty() const;
//! returns string representation in Wkt form
QString asWktCoordinates() const;
//! returns string representation as WKT Polygon
//@note added om 2.0
QString asWktPolygon() const;
//! returns string representation of form xmin,ymin xmax,ymax
QString toString( bool automaticPrecision = false ) const;
//! overloaded toString that allows precision of numbers to be set
Expand Down
60 changes: 48 additions & 12 deletions tests/src/python/test_qgsrectangle.py
Expand Up @@ -10,9 +10,12 @@
class TestQgsRectangle(unittest.TestCase):

def testCtor(self):
rect = QgsRectangle( 5.0, 5.0, 10.0, 10.0)
rect = QgsRectangle(5.0, 5.0, 10.0, 10.0)

assert rect.isEmpty(), "Empty rectangle constructed"
myExpectedResult = True
myResult = rect.isEmpty()
myMessage = ('Expected: %s Got: %s' % (myExpectedResult, myResult))
assert rect.isEmpty(), myMessage

myMessage = ('Expected: %s\nGot: %s\n' %
(5.0, rect.xMinimum()))
Expand Down Expand Up @@ -65,15 +68,15 @@ def testIntersection(self):
assert rect1.intersects(rect2), myMessage

rect3 = rect1.intersect(rect2)
assert rect3.isEmpty(), "Empty rectangle returned"
self.assertFalse(rect3.isEmpty(), "Empty rectangle returned")

myMessage = ('Expected: %s\nGot: %s\n' %
(3.0, rect.width()))
assert rect.width() == 3.0, myMessage
(3.0, rect3.width()))
assert rect3.width() == 3.0, myMessage

myMessage = ('Expected: %s\nGot: %s\n' %
(3.0, rect.height()))
assert rect.height() == 3.0, myMessage
(3.0, rect3.height()))
assert rect3.height() == 3.0, myMessage

def testContains(self):
rect1 = QgsRectangle( 0.0, 0.0, 5.0, 5.0)
Expand Down Expand Up @@ -106,15 +109,19 @@ def testContains(self):

myMessage = ('Expected: %s\nGot: %s\n' %
(False, rect1.contains(pnt2)))
assert rect1.contains(pnt2), myMessage
self.assertFalse(rect1.contains(pnt2), myMessage)

myMessage = ('Expected: %s\nGot: %s\n' %
(True, rect2.contains(pnt2)))
assert rect2.contains(pnt2), myMessage

myMessage = ('Expected: %s\nGot: %s\n' %
(True, rect3.contains(pnt2)))
assert rect3.contains(pnt2), myMessage
(False, rect3.contains(pnt2)))
self.assertFalse(rect3.contains(pnt2), myMessage)

myMessage = ('Expected: %s\nGot: %s\n' %
(True, rect3.contains(pnt1)))
self.assertTrue(rect3.contains(pnt1), myMessage)

def testUnion(self):
rect1 = QgsRectangle( 0.0, 0.0, 5.0, 5.0)
Expand All @@ -135,8 +142,11 @@ def testUnion(self):
(True, rect1.contains(pnt1)))
assert rect1.contains(pnt1), myMessage

print rect1.toString()
assert rect1 == QgsRectangle(0.0, 0.0, 6.0, 6.0), "Wrong combine with point result"
myExpectedResult = QgsRectangle(0.0, 0.0, 6.0, 5.0).toString()
myResult = rect1.toString()
myMessage = ('Expected: %s\nGot: %s\n' %
(myExpectedResult, myResult))
self.assertEquals(myResult, myExpectedResult, myMessage)

rect1 = QgsRectangle( 0.0, 0.0, 5.0, 5.0)
rect1.unionRect(rect2)
Expand All @@ -145,3 +155,29 @@ def testUnion(self):
assert rect1.contains(rect2), myMessage

assert rect1 == QgsRectangle(0.0, 0.0, 7.0, 7.0), "Wrong union result"

def testAsWktCoordinates(self):
"""Test that we can get a proper wkt representation fo the rect"""
rect1 = QgsRectangle( 0.0, 0.0, 5.0, 5.0)
myExpectedWkt = '0.0000000000000000 0.0000000000000000, 5.0000000000000000 5.0000000000000000'
myWkt = rect1.asWktCoordinates()
myMessage = ('Expected: %s\nGot: %s\n' %
(myExpectedWkt, myWkt))
self.assertEquals(myWkt, myExpectedWkt, myMessage)

def testAsWktPolygon(self):
"""Test that we can get a proper wkt polygon representation fo the rect"""
rect1 = QgsRectangle( 0.0, 0.0, 5.0, 5.0)
myExpectedWkt = ('POLYGON((0.0000000000000000 0.0000000000000000, '
'5.0000000000000000 0.0000000000000000, '
'5.0000000000000000 5.0000000000000000, '
'0.0000000000000000 5.0000000000000000, '
'0.0000000000000000 0.0000000000000000))')
myWkt = rect1.asWktPolygon()
myMessage = ('Expected: %s\nGot: %s\n' %
(myExpectedWkt, myWkt))
self.assertEquals(myWkt, myExpectedWkt, myMessage)


if __name__ == '__main__':
unittest.main()
10 changes: 10 additions & 0 deletions tests/testdata/raster/band1_byte_noct_epsg4326.tif.aux.xml
@@ -1,5 +1,15 @@
<PAMDataset>
<PAMRasterBand band="1">
<Histograms>
<HistItem>
<HistMin>-0.498046875</HistMin>
<HistMax>255.498046875</HistMax>
<BucketCount>256</BucketCount>
<IncludeOutOfRange>0</IncludeOutOfRange>
<Approximate>0</Approximate>
<HistCounts>0|0|1|0|0|1|0|0|0|0|1|0|1|0|0|1|0|1|0|0|1|0|1|0|0|1|0|1|0|0|1|0|0|0|0|1|0|0|1|0|1|0|0|1|0|1|0|0|1|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|1|0|0|0|0|1|0|1|0|0|1|0|1|0|0|1|0|0|1|0|1|0|0|1|0|1|0|0|0|0|1|0|0|1|0|1|0|0|1|0|1|0|0|1|0|0|1|0|1|0|0|1|0|0|0|0|1|0|1|0|0|1|0|1|0|0|1|0|1|0|0|1|0|1|0|0|1|0|0|0|0|1|0|0|1|0|1|0|0|1|0|1|0|0|1|0|1|0|0|1|0|1|0|0|0|0|1|0|0|1|0|0|1|0|1|0|0|1|0|1|0|0|1|0|1|0|0|1|0|0|0|0|1|0|1|0|0|1|0|1|0|0|1|0|0|1|0|1|0|0|1|0|1|0|0|0|0|1|0|0|1|0|1|0|0|1|0|1|0|0|1|0|0|1|19</HistCounts>
</HistItem>
</Histograms>
<Metadata>
<MDI key="COLOR_TABLE_RULE_RGB_0">2.000000e+00 1.280000e+02 0 255 0 255 255 0</MDI>
<MDI key="COLOR_TABLE_RULE_RGB_1">1.280000e+02 2.540000e+02 255 255 0 255 0 0</MDI>
Expand Down
10 changes: 10 additions & 0 deletions tests/testdata/raster/band1_int16_noct_epsg4326.tif.aux.xml
@@ -1,5 +1,15 @@
<PAMDataset>
<PAMRasterBand band="1">
<Histograms>
<HistItem>
<HistMin>-32435.39</HistMin>
<HistMax>33091.39</HistMax>
<BucketCount>100</BucketCount>
<IncludeOutOfRange>0</IncludeOutOfRange>
<Approximate>0</Approximate>
<HistCounts>1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|0|0|0|0|0|0|0|0|0|0|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1</HistCounts>
</HistItem>
</Histograms>
<Metadata>
<MDI key="COLOR_TABLE_RULE_RGB_0">-3.211166e+04 3.276700e+02 0 255 0 255 255 0</MDI>
<MDI key="COLOR_TABLE_RULE_RGB_1">3.276700e+02 3.276700e+04 255 255 0 255 0 0</MDI>
Expand Down
30 changes: 30 additions & 0 deletions tests/testdata/raster/band3_float32_noct_epsg4326.tif.aux.xml
@@ -1,5 +1,15 @@
<PAMDataset>
<PAMRasterBand band="1">
<Histograms>
<HistItem>
<HistMin>-3.365659928167135e+38</HistMin>
<HistMax>3.433659951548935e+38</HistMax>
<BucketCount>100</BucketCount>
<IncludeOutOfRange>0</IncludeOutOfRange>
<Approximate>0</Approximate>
<HistCounts>1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|0|0|0|0|0|0|0|0|0|0|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1</HistCounts>
</HistItem>
</Histograms>
<Metadata>
<MDI key="COLOR_TABLE_RULE_RGB_0">0.000000e+00 0.000000e+00 255 127 0 255 127 0</MDI>
<MDI key="COLOR_TABLE_RULES_COUNT">1</MDI>
Expand All @@ -10,6 +20,16 @@
</Metadata>
</PAMRasterBand>
<PAMRasterBand band="2">
<Histograms>
<HistItem>
<HistMin>-3.365659928167135e+38</HistMin>
<HistMax>3.433659951548935e+38</HistMax>
<BucketCount>100</BucketCount>
<IncludeOutOfRange>0</IncludeOutOfRange>
<Approximate>0</Approximate>
<HistCounts>1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|0|0|0|0|0|0|0|0|0|0|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1</HistCounts>
</HistItem>
</Histograms>
<Metadata>
<MDI key="COLOR_TABLE_RULE_RGB_0">0.000000e+00 0.000000e+00 255 127 0 255 127 0</MDI>
<MDI key="COLOR_TABLE_RULES_COUNT">1</MDI>
Expand All @@ -20,6 +40,16 @@
</Metadata>
</PAMRasterBand>
<PAMRasterBand band="3">
<Histograms>
<HistItem>
<HistMin>-3.365659928167135e+38</HistMin>
<HistMax>3.433659951548935e+38</HistMax>
<BucketCount>100</BucketCount>
<IncludeOutOfRange>0</IncludeOutOfRange>
<Approximate>0</Approximate>
<HistCounts>1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|0|0|0|0|0|0|0|0|0|0|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1</HistCounts>
</HistItem>
</Histograms>
<Metadata>
<MDI key="COLOR_TABLE_RULE_RGB_0">0.000000e+00 0.000000e+00 255 127 0 255 127 0</MDI>
<MDI key="COLOR_TABLE_RULES_COUNT">1</MDI>
Expand Down
30 changes: 30 additions & 0 deletions tests/testdata/raster/band3_int16_noct_epsg4326.tif.aux.xml
@@ -1,5 +1,15 @@
<PAMDataset>
<PAMRasterBand band="1">
<Histograms>
<HistItem>
<HistMin>-32435.39</HistMin>
<HistMax>33091.39</HistMax>
<BucketCount>100</BucketCount>
<IncludeOutOfRange>0</IncludeOutOfRange>
<Approximate>0</Approximate>
<HistCounts>1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|0|0|0|0|0|0|0|0|0|0|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1</HistCounts>
</HistItem>
</Histograms>
<Metadata>
<MDI key="COLOR_TABLE_RULE_RGB_0">-3.211166e+04 3.276700e+02 0 255 0 255 255 0</MDI>
<MDI key="COLOR_TABLE_RULE_RGB_1">3.276700e+02 3.276700e+04 255 255 0 255 0 0</MDI>
Expand All @@ -11,6 +21,16 @@
</Metadata>
</PAMRasterBand>
<PAMRasterBand band="2">
<Histograms>
<HistItem>
<HistMin>-32435.39</HistMin>
<HistMax>33091.39</HistMax>
<BucketCount>100</BucketCount>
<IncludeOutOfRange>0</IncludeOutOfRange>
<Approximate>0</Approximate>
<HistCounts>1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|0|0|0|0|0|0|0|0|0|0|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1</HistCounts>
</HistItem>
</Histograms>
<Metadata>
<MDI key="COLOR_TABLE_RULE_RGB_0">-3.211166e+04 3.276700e+02 0 255 0 255 255 0</MDI>
<MDI key="COLOR_TABLE_RULE_RGB_1">3.276700e+02 3.276700e+04 255 255 0 255 0 0</MDI>
Expand All @@ -22,6 +42,16 @@
</Metadata>
</PAMRasterBand>
<PAMRasterBand band="3">
<Histograms>
<HistItem>
<HistMin>-32435.39</HistMin>
<HistMax>33091.39</HistMax>
<BucketCount>100</BucketCount>
<IncludeOutOfRange>0</IncludeOutOfRange>
<Approximate>0</Approximate>
<HistCounts>1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|0|0|0|0|0|0|0|0|0|0|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1</HistCounts>
</HistItem>
</Histograms>
<Metadata>
<MDI key="COLOR_TABLE_RULE_RGB_0">-3.211166e+04 3.276700e+02 0 255 0 255 255 0</MDI>
<MDI key="COLOR_TABLE_RULE_RGB_1">3.276700e+02 3.276700e+04 255 255 0 255 0 0</MDI>
Expand Down

0 comments on commit 9b0fee3

Please sign in to comment.