change getCentroid
This commit is contained in:
@@ -198,23 +198,26 @@ OpenLayers.Geometry.LinearRing = OpenLayers.Class(
|
|||||||
} else if (len > 2) {
|
} else if (len > 2) {
|
||||||
var sumX = 0.0;
|
var sumX = 0.0;
|
||||||
var sumY = 0.0;
|
var sumY = 0.0;
|
||||||
var averX = 0.0;
|
var x0 = this.components[0].x;
|
||||||
var averY = 0.0;
|
var y0 = this.components[0].y;
|
||||||
for (var i = 0; i < len; i++) {
|
|
||||||
averX += this.components[i].x;
|
|
||||||
averY += this.components[i].y;
|
|
||||||
}
|
|
||||||
averX = averX / len;
|
|
||||||
averY = averY / len;
|
|
||||||
for (var i = 0; i < len - 1; i++) {
|
|
||||||
var b = this.components[i];
|
|
||||||
var c = this.components[i+1];
|
|
||||||
sumX += (b.x + c.x - 2 * averX) * ((b.x - averX) * (c.y - averY) - (c.x - averX) * (b.y - averY));
|
|
||||||
sumY += (b.y + c.y - 2 * averY) * ((b.x - averX) * (c.y - averY) - (c.x - averX) * (b.y - averY));
|
|
||||||
}
|
|
||||||
var area = -1 * this.getArea();
|
var area = -1 * this.getArea();
|
||||||
var x = averX + sumX / (6 * area);
|
if (area != 0) {
|
||||||
var y = averY + sumY / (6 * area);
|
for (var i = 0; i < len - 1; i++) {
|
||||||
|
var b = this.components[i];
|
||||||
|
var c = this.components[i+1];
|
||||||
|
sumX += (b.x + c.x - 2 * x0) * ((b.x - x0) * (c.y - y0) - (c.x - x0) * (b.y - y0));
|
||||||
|
sumY += (b.y + c.y - 2 * y0) * ((b.x - x0) * (c.y - y0) - (c.x - x0) * (b.y - y0));
|
||||||
|
}
|
||||||
|
var x = x0 + sumX / (6 * area);
|
||||||
|
var y = y0 + sumY / (6 * area);
|
||||||
|
} else {
|
||||||
|
for (var i = 0; i < len - 1; i++) {
|
||||||
|
sumX += this.components[i].x;
|
||||||
|
sumY += this.components[i].y;
|
||||||
|
}
|
||||||
|
var x = sumX / (len - 1);
|
||||||
|
var y = sumY / (len - 1);
|
||||||
|
}
|
||||||
return new OpenLayers.Geometry.Point(x, y);
|
return new OpenLayers.Geometry.Point(x, y);
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
Reference in New Issue
Block a user