Merge pull request #7543 from ahocevar/interiorpoint-donut

Donut polygon labels do not get a chance to get rendered
This commit is contained in:
Andreas Hocevar
2017-12-06 21:28:12 +01:00
committed by GitHub
2 changed files with 24 additions and 11 deletions
+3 -1
View File
@@ -24,7 +24,8 @@ ol.geom.flat.interiorpoint.linearRings = function(flatCoordinates, offset,
/** @type {Array.<number>} */ /** @type {Array.<number>} */
var intersections = []; var intersections = [];
// Calculate intersections with the horizontal line // Calculate intersections with the horizontal line
var end = ends[0]; for (var r = 0, rr = ends.length; r < rr; ++r) {
var end = ends[r];
x1 = flatCoordinates[end - stride]; x1 = flatCoordinates[end - stride];
y1 = flatCoordinates[end - stride + 1]; y1 = flatCoordinates[end - stride + 1];
for (i = offset; i < end; i += stride) { for (i = offset; i < end; i += stride) {
@@ -37,6 +38,7 @@ ol.geom.flat.interiorpoint.linearRings = function(flatCoordinates, offset,
x1 = x2; x1 = x2;
y1 = y2; y1 = y2;
} }
}
// Find the longest segment of the horizontal line that has its center point // Find the longest segment of the horizontal line that has its center point
// inside the linear ring. // inside the linear ring.
var pointX = NaN; var pointX = NaN;
+11
View File
@@ -550,6 +550,17 @@ describe('ol.geom.Polygon', function() {
expect(interiorPoint.layout).to.be('XYM'); expect(interiorPoint.layout).to.be('XYM');
expect(interiorPoint.getCoordinates()).to.eql([0.5, 0.5, 1]); expect(interiorPoint.getCoordinates()).to.eql([0.5, 0.5, 1]);
}); });
it('returns XYM point for donut polygons', function() {
var geom = new ol.geom.Polygon([
[[0.5, 0.5], [0.5, 2.5], [2.5, 2.5], [2.5, 0.5], [0.5, 0.5]],
[[1, 1], [2, 1], [2, 2], [1, 2], [1, 1]]
]);
var interiorPoint = geom.getInteriorPoint();
expect(interiorPoint.getType()).to.be('Point');
expect(interiorPoint.layout).to.be('XYM');
expect(interiorPoint.getCoordinates()).to.eql([0.75, 1.5, 0.5]);
});
}); });
describe('ol.geom.Polygon.fromExtent', function() { describe('ol.geom.Polygon.fromExtent', function() {