diff --git a/lib/OpenLayers/Geometry/LinearRing.js b/lib/OpenLayers/Geometry/LinearRing.js index 47d9208dd4..336521d6dd 100644 --- a/lib/OpenLayers/Geometry/LinearRing.js +++ b/lib/OpenLayers/Geometry/LinearRing.js @@ -190,7 +190,7 @@ OpenLayers.Geometry.LinearRing = OpenLayers.Class( * {} The centroid of the collection */ getCentroid: function() { - if ( this.components && (this.components.length > 2)) { + if (this.components && (this.components.length > 2)) { var sumX = 0.0; var sumY = 0.0; for (var i = 0; i < this.components.length - 1; i++) { @@ -202,8 +202,10 @@ OpenLayers.Geometry.LinearRing = OpenLayers.Class( var area = -1 * this.getArea(); var x = sumX / (6 * area); var y = sumY / (6 * area); + return new OpenLayers.Geometry.Point(x, y); + } else { + return null; } - return new OpenLayers.Geometry.Point(x, y); }, /** diff --git a/tests/Geometry/LinearRing.html b/tests/Geometry/LinearRing.html index 8e0feb56c1..e4d6696581 100644 --- a/tests/Geometry/LinearRing.html +++ b/tests/Geometry/LinearRing.html @@ -112,7 +112,24 @@ var ring = new OpenLayers.Geometry.LinearRing(components); t.eq(ring.getLength(), 40, "getLength returns the correct perimiter"); } - + + function test_LinearRing_getCentroid(t) { + t.plan(2); + var components = [ + new OpenLayers.Geometry.Point(0,0), + new OpenLayers.Geometry.Point(0,10), + new OpenLayers.Geometry.Point(10,10), + new OpenLayers.Geometry.Point(10,0) + ]; + var ring = new OpenLayers.Geometry.LinearRing(components); + var centroid = ring.getCentroid(); + t.ok(centroid.x === 5 && centroid.y === 5, "getCentroid returns the correct centroid"); + ring.destroy(); + + ring = new OpenLayers.Geometry.LinearRing(); + t.eq(ring.getCentroid(), null, "getCentroid returns null if no components"); + } + function test_LinearRing_move(t) { var nvert = 4,