Factor out ol.geom.flat.reverse
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
goog.provide('ol.geom.flat.orient');
|
goog.provide('ol.geom.flat.orient');
|
||||||
|
|
||||||
goog.require('ol.geom.flat');
|
goog.require('ol.geom.flat');
|
||||||
|
goog.require('ol.geom.flat.reverse');
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -89,7 +90,7 @@ ol.geom.flat.orient.orientLinearRings =
|
|||||||
flatCoordinates, offset, end, stride);
|
flatCoordinates, offset, end, stride);
|
||||||
var reverse = i === 0 ? !isClockwise : isClockwise;
|
var reverse = i === 0 ? !isClockwise : isClockwise;
|
||||||
if (reverse) {
|
if (reverse) {
|
||||||
ol.geom.flat.reverseCoordinates(flatCoordinates, offset, end, stride);
|
ol.geom.flat.reverse.coordinates(flatCoordinates, offset, end, stride);
|
||||||
}
|
}
|
||||||
offset = end;
|
offset = end;
|
||||||
}
|
}
|
||||||
|
|||||||
22
src/ol/geom/flat/reverseflatgeom.js
Normal file
22
src/ol/geom/flat/reverseflatgeom.js
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
goog.provide('ol.geom.flat.reverse');
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Array.<number>} flatCoordinates Flat coordinates.
|
||||||
|
* @param {number} offset Offset.
|
||||||
|
* @param {number} end End.
|
||||||
|
* @param {number} stride Stride.
|
||||||
|
*/
|
||||||
|
ol.geom.flat.reverse.coordinates =
|
||||||
|
function(flatCoordinates, offset, end, stride) {
|
||||||
|
while (offset < end - stride) {
|
||||||
|
var i;
|
||||||
|
for (i = 0; i < stride; ++i) {
|
||||||
|
var tmp = flatCoordinates[offset + i];
|
||||||
|
flatCoordinates[offset + i] = flatCoordinates[end - stride + i];
|
||||||
|
flatCoordinates[end - stride + i] = tmp;
|
||||||
|
}
|
||||||
|
offset += stride;
|
||||||
|
end -= stride;
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -28,27 +28,6 @@ ol.geom.flat.linearRingssGetFlatCenters =
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {Array.<number>} flatCoordinates Flat coordinates.
|
|
||||||
* @param {number} offset Offset.
|
|
||||||
* @param {number} end End.
|
|
||||||
* @param {number} stride Stride.
|
|
||||||
*/
|
|
||||||
ol.geom.flat.reverseCoordinates =
|
|
||||||
function(flatCoordinates, offset, end, stride) {
|
|
||||||
while (offset < end - stride) {
|
|
||||||
var i;
|
|
||||||
for (i = 0; i < stride; ++i) {
|
|
||||||
var tmp = flatCoordinates[offset + i];
|
|
||||||
flatCoordinates[offset + i] = flatCoordinates[end - stride + i];
|
|
||||||
flatCoordinates[end - stride + i] = tmp;
|
|
||||||
}
|
|
||||||
offset += stride;
|
|
||||||
end -= stride;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the square of the closest distance between the point (x, y) and the
|
* Returns the square of the closest distance between the point (x, y) and the
|
||||||
* line segment (x1, y1) to (x2, y2).
|
* line segment (x1, y1) to (x2, y2).
|
||||||
|
|||||||
131
test/spec/ol/geom/flat/reverseflatgeom.js
Normal file
131
test/spec/ol/geom/flat/reverseflatgeom.js
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
goog.provide('ol.test.geom.flat.reverse');
|
||||||
|
|
||||||
|
describe('ol.geom.flat.reverse', function() {
|
||||||
|
|
||||||
|
describe('ol.geom.flat.reverse.coordinates', function() {
|
||||||
|
|
||||||
|
describe('with a stride of 2', function() {
|
||||||
|
|
||||||
|
it('can reverse empty flat coordinates', function() {
|
||||||
|
var flatCoordinates = [];
|
||||||
|
ol.geom.flat.reverse.coordinates(
|
||||||
|
flatCoordinates, 0, flatCoordinates.length, 2);
|
||||||
|
expect(flatCoordinates).to.be.empty();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can reverse one flat coordinates', function() {
|
||||||
|
var flatCoordinates = [1, 2];
|
||||||
|
ol.geom.flat.reverse.coordinates(
|
||||||
|
flatCoordinates, 0, flatCoordinates.length, 2);
|
||||||
|
expect(flatCoordinates).to.eql([1, 2]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can reverse two flat coordinates', function() {
|
||||||
|
var flatCoordinates = [1, 2, 3, 4];
|
||||||
|
ol.geom.flat.reverse.coordinates(
|
||||||
|
flatCoordinates, 0, flatCoordinates.length, 2);
|
||||||
|
expect(flatCoordinates).to.eql([3, 4, 1, 2]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can reverse three flat coordinates', function() {
|
||||||
|
var flatCoordinates = [1, 2, 3, 4, 5, 6];
|
||||||
|
ol.geom.flat.reverse.coordinates(
|
||||||
|
flatCoordinates, 0, flatCoordinates.length, 2);
|
||||||
|
expect(flatCoordinates).to.eql([5, 6, 3, 4, 1, 2]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can reverse four flat coordinates', function() {
|
||||||
|
var flatCoordinates = [1, 2, 3, 4, 5, 6, 7, 8];
|
||||||
|
ol.geom.flat.reverse.coordinates(
|
||||||
|
flatCoordinates, 0, flatCoordinates.length, 2);
|
||||||
|
expect(flatCoordinates).to.eql([7, 8, 5, 6, 3, 4, 1, 2]);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('with a stride of 3', function() {
|
||||||
|
|
||||||
|
it('can reverse empty flat coordinates', function() {
|
||||||
|
var flatCoordinates = [];
|
||||||
|
ol.geom.flat.reverse.coordinates(
|
||||||
|
flatCoordinates, 0, flatCoordinates.length, 3);
|
||||||
|
expect(flatCoordinates).to.be.empty();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can reverse one flat coordinates', function() {
|
||||||
|
var flatCoordinates = [1, 2, 3];
|
||||||
|
ol.geom.flat.reverse.coordinates(
|
||||||
|
flatCoordinates, 0, flatCoordinates.length, 3);
|
||||||
|
expect(flatCoordinates).to.eql([1, 2, 3]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can reverse two flat coordinates', function() {
|
||||||
|
var flatCoordinates = [1, 2, 3, 4, 5, 6];
|
||||||
|
ol.geom.flat.reverse.coordinates(
|
||||||
|
flatCoordinates, 0, flatCoordinates.length, 3);
|
||||||
|
expect(flatCoordinates).to.eql([4, 5, 6, 1, 2, 3]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can reverse three flat coordinates', function() {
|
||||||
|
var flatCoordinates = [1, 2, 3, 4, 5, 6, 7, 8, 9];
|
||||||
|
ol.geom.flat.reverse.coordinates(
|
||||||
|
flatCoordinates, 0, flatCoordinates.length, 3);
|
||||||
|
expect(flatCoordinates).to.eql([7, 8, 9, 4, 5, 6, 1, 2, 3]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can reverse four flat coordinates', function() {
|
||||||
|
var flatCoordinates = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
|
||||||
|
ol.geom.flat.reverse.coordinates(
|
||||||
|
flatCoordinates, 0, flatCoordinates.length, 3);
|
||||||
|
expect(flatCoordinates).to.eql([10, 11, 12, 7, 8, 9, 4, 5, 6, 1, 2, 3]);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('with a stride of 4', function() {
|
||||||
|
|
||||||
|
it('can reverse empty flat coordinates', function() {
|
||||||
|
var flatCoordinates = [];
|
||||||
|
ol.geom.flat.reverse.coordinates(
|
||||||
|
flatCoordinates, 0, flatCoordinates.length, 4);
|
||||||
|
expect(flatCoordinates).to.be.empty();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can reverse one flat coordinates', function() {
|
||||||
|
var flatCoordinates = [1, 2, 3, 4];
|
||||||
|
ol.geom.flat.reverse.coordinates(
|
||||||
|
flatCoordinates, 0, flatCoordinates.length, 4);
|
||||||
|
expect(flatCoordinates).to.eql([1, 2, 3, 4]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can reverse two flat coordinates', function() {
|
||||||
|
var flatCoordinates = [1, 2, 3, 4, 5, 6, 7, 8];
|
||||||
|
ol.geom.flat.reverse.coordinates(
|
||||||
|
flatCoordinates, 0, flatCoordinates.length, 4);
|
||||||
|
expect(flatCoordinates).to.eql([5, 6, 7, 8, 1, 2, 3, 4]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can reverse three flat coordinates', function() {
|
||||||
|
var flatCoordinates = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
|
||||||
|
ol.geom.flat.reverse.coordinates(
|
||||||
|
flatCoordinates, 0, flatCoordinates.length, 4);
|
||||||
|
expect(flatCoordinates).to.eql([9, 10, 11, 12, 5, 6, 7, 8, 1, 2, 3, 4]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can reverse four flat coordinates', function() {
|
||||||
|
var flatCoordinates =
|
||||||
|
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
|
||||||
|
ol.geom.flat.reverse.coordinates(
|
||||||
|
flatCoordinates, 0, flatCoordinates.length, 4);
|
||||||
|
expect(flatCoordinates).to.eql(
|
||||||
|
[13, 14, 15, 16, 9, 10, 11, 12, 5, 6, 7, 8, 1, 2, 3, 4]);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
goog.require('ol.geom.flat');
|
||||||
|
goog.require('ol.geom.flat.reverse');
|
||||||
@@ -2,130 +2,6 @@ goog.provide('ol.test.geom.flat');
|
|||||||
|
|
||||||
|
|
||||||
describe('ol.geom.flat', function() {
|
describe('ol.geom.flat', function() {
|
||||||
|
|
||||||
describe('ol.geom.flat.reverseCoordinates', function() {
|
|
||||||
|
|
||||||
describe('with a stride of 2', function() {
|
|
||||||
|
|
||||||
it('can reverse empty flat coordinates', function() {
|
|
||||||
var flatCoordinates = [];
|
|
||||||
ol.geom.flat.reverseCoordinates(
|
|
||||||
flatCoordinates, 0, flatCoordinates.length, 2);
|
|
||||||
expect(flatCoordinates).to.be.empty();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('can reverse one flat coordinates', function() {
|
|
||||||
var flatCoordinates = [1, 2];
|
|
||||||
ol.geom.flat.reverseCoordinates(
|
|
||||||
flatCoordinates, 0, flatCoordinates.length, 2);
|
|
||||||
expect(flatCoordinates).to.eql([1, 2]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('can reverse two flat coordinates', function() {
|
|
||||||
var flatCoordinates = [1, 2, 3, 4];
|
|
||||||
ol.geom.flat.reverseCoordinates(
|
|
||||||
flatCoordinates, 0, flatCoordinates.length, 2);
|
|
||||||
expect(flatCoordinates).to.eql([3, 4, 1, 2]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('can reverse three flat coordinates', function() {
|
|
||||||
var flatCoordinates = [1, 2, 3, 4, 5, 6];
|
|
||||||
ol.geom.flat.reverseCoordinates(
|
|
||||||
flatCoordinates, 0, flatCoordinates.length, 2);
|
|
||||||
expect(flatCoordinates).to.eql([5, 6, 3, 4, 1, 2]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('can reverse four flat coordinates', function() {
|
|
||||||
var flatCoordinates = [1, 2, 3, 4, 5, 6, 7, 8];
|
|
||||||
ol.geom.flat.reverseCoordinates(
|
|
||||||
flatCoordinates, 0, flatCoordinates.length, 2);
|
|
||||||
expect(flatCoordinates).to.eql([7, 8, 5, 6, 3, 4, 1, 2]);
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('with a stride of 3', function() {
|
|
||||||
|
|
||||||
it('can reverse empty flat coordinates', function() {
|
|
||||||
var flatCoordinates = [];
|
|
||||||
ol.geom.flat.reverseCoordinates(
|
|
||||||
flatCoordinates, 0, flatCoordinates.length, 3);
|
|
||||||
expect(flatCoordinates).to.be.empty();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('can reverse one flat coordinates', function() {
|
|
||||||
var flatCoordinates = [1, 2, 3];
|
|
||||||
ol.geom.flat.reverseCoordinates(
|
|
||||||
flatCoordinates, 0, flatCoordinates.length, 3);
|
|
||||||
expect(flatCoordinates).to.eql([1, 2, 3]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('can reverse two flat coordinates', function() {
|
|
||||||
var flatCoordinates = [1, 2, 3, 4, 5, 6];
|
|
||||||
ol.geom.flat.reverseCoordinates(
|
|
||||||
flatCoordinates, 0, flatCoordinates.length, 3);
|
|
||||||
expect(flatCoordinates).to.eql([4, 5, 6, 1, 2, 3]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('can reverse three flat coordinates', function() {
|
|
||||||
var flatCoordinates = [1, 2, 3, 4, 5, 6, 7, 8, 9];
|
|
||||||
ol.geom.flat.reverseCoordinates(
|
|
||||||
flatCoordinates, 0, flatCoordinates.length, 3);
|
|
||||||
expect(flatCoordinates).to.eql([7, 8, 9, 4, 5, 6, 1, 2, 3]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('can reverse four flat coordinates', function() {
|
|
||||||
var flatCoordinates = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
|
|
||||||
ol.geom.flat.reverseCoordinates(
|
|
||||||
flatCoordinates, 0, flatCoordinates.length, 3);
|
|
||||||
expect(flatCoordinates).to.eql([10, 11, 12, 7, 8, 9, 4, 5, 6, 1, 2, 3]);
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('with a stride of 4', function() {
|
|
||||||
|
|
||||||
it('can reverse empty flat coordinates', function() {
|
|
||||||
var flatCoordinates = [];
|
|
||||||
ol.geom.flat.reverseCoordinates(
|
|
||||||
flatCoordinates, 0, flatCoordinates.length, 4);
|
|
||||||
expect(flatCoordinates).to.be.empty();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('can reverse one flat coordinates', function() {
|
|
||||||
var flatCoordinates = [1, 2, 3, 4];
|
|
||||||
ol.geom.flat.reverseCoordinates(
|
|
||||||
flatCoordinates, 0, flatCoordinates.length, 4);
|
|
||||||
expect(flatCoordinates).to.eql([1, 2, 3, 4]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('can reverse two flat coordinates', function() {
|
|
||||||
var flatCoordinates = [1, 2, 3, 4, 5, 6, 7, 8];
|
|
||||||
ol.geom.flat.reverseCoordinates(
|
|
||||||
flatCoordinates, 0, flatCoordinates.length, 4);
|
|
||||||
expect(flatCoordinates).to.eql([5, 6, 7, 8, 1, 2, 3, 4]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('can reverse three flat coordinates', function() {
|
|
||||||
var flatCoordinates = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
|
|
||||||
ol.geom.flat.reverseCoordinates(
|
|
||||||
flatCoordinates, 0, flatCoordinates.length, 4);
|
|
||||||
expect(flatCoordinates).to.eql([9, 10, 11, 12, 5, 6, 7, 8, 1, 2, 3, 4]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('can reverse four flat coordinates', function() {
|
|
||||||
var flatCoordinates =
|
|
||||||
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
|
|
||||||
ol.geom.flat.reverseCoordinates(
|
|
||||||
flatCoordinates, 0, flatCoordinates.length, 4);
|
|
||||||
expect(flatCoordinates).to.eql(
|
|
||||||
[13, 14, 15, 16, 9, 10, 11, 12, 5, 6, 7, 8, 1, 2, 3, 4]);
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user