From 572c111bf118f3e0b25f63fbb324ae6e35552e73 Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Sun, 20 Jan 2013 22:21:18 -0500 Subject: [PATCH] Add polygonCentroid and polygon area to utils --- js/id/util.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/js/id/util.js b/js/id/util.js index 79b65c524..9feb4ee38 100644 --- a/js/id/util.js +++ b/js/id/util.js @@ -145,3 +145,27 @@ iD.util.geo.polygonIntersectsPolygon = function(outer, inner) { return iD.util.geo.pointInPolygon(point, outer); }); }; + +// May have issues with self interesecting polygons +iD.util.geo.polygonCentroid = function(polygon) { + var x = 0, + y = 0, + area = iD.util.geo.area(polygon); + for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) { + var xi = polygon[i][0], yi = polygon[i][1]; + var xj = polygon[j][0], yj = polygon[j][1]; + x += (xi + xj) * (xj * yi - xi * yj); + y += (yi + yj) * (xj * yi - xi * yj); + } + return [x / 6 / area, y / 6 / area]; +}; + +iD.util.geo.area = function(polygon) { + var area = 0; + for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) { + var xi = polygon[i][0], yi = polygon[i][1]; + var xj = polygon[j][0], yj = polygon[j][1]; + area += xj * yi - xi * yj; + } + return area/2; +};