package.geom.flat.transform.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ol Show documentation
Show all versions of ol Show documentation
OpenLayers mapping library
The newest version!
/**
* @module ol/geom/flat/transform
*/
/**
* @param {Array} flatCoordinates Flat coordinates.
* @param {number} offset Offset.
* @param {number} end End.
* @param {number} stride Stride.
* @param {import("../../transform.js").Transform} transform Transform.
* @param {Array} [dest] Destination.
* @param {number} [destinationStride] Stride of destination coordinates; if unspecified, assumed to be 2.
* @return {Array} Transformed coordinates.
*/
export function transform2D(
flatCoordinates,
offset,
end,
stride,
transform,
dest,
destinationStride,
) {
dest = dest ? dest : [];
destinationStride = destinationStride ? destinationStride : 2;
let i = 0;
for (let j = offset; j < end; j += stride) {
const x = flatCoordinates[j];
const y = flatCoordinates[j + 1];
dest[i++] = transform[0] * x + transform[2] * y + transform[4];
dest[i++] = transform[1] * x + transform[3] * y + transform[5];
for (let k = 2; k < destinationStride; k++) {
dest[i++] = flatCoordinates[j + k];
}
}
if (dest && dest.length != i) {
dest.length = i;
}
return dest;
}
/**
* @param {Array} flatCoordinates Flat coordinates.
* @param {number} offset Offset.
* @param {number} end End.
* @param {number} stride Stride.
* @param {number} angle Angle.
* @param {Array} anchor Rotation anchor point.
* @param {Array} [dest] Destination.
* @return {Array} Transformed coordinates.
*/
export function rotate(
flatCoordinates,
offset,
end,
stride,
angle,
anchor,
dest,
) {
dest = dest ? dest : [];
const cos = Math.cos(angle);
const sin = Math.sin(angle);
const anchorX = anchor[0];
const anchorY = anchor[1];
let i = 0;
for (let j = offset; j < end; j += stride) {
const deltaX = flatCoordinates[j] - anchorX;
const deltaY = flatCoordinates[j + 1] - anchorY;
dest[i++] = anchorX + deltaX * cos - deltaY * sin;
dest[i++] = anchorY + deltaX * sin + deltaY * cos;
for (let k = j + 2; k < j + stride; ++k) {
dest[i++] = flatCoordinates[k];
}
}
if (dest && dest.length != i) {
dest.length = i;
}
return dest;
}
/**
* Scale the coordinates.
* @param {Array} flatCoordinates Flat coordinates.
* @param {number} offset Offset.
* @param {number} end End.
* @param {number} stride Stride.
* @param {number} sx Scale factor in the x-direction.
* @param {number} sy Scale factor in the y-direction.
* @param {Array} anchor Scale anchor point.
* @param {Array} [dest] Destination.
* @return {Array} Transformed coordinates.
*/
export function scale(
flatCoordinates,
offset,
end,
stride,
sx,
sy,
anchor,
dest,
) {
dest = dest ? dest : [];
const anchorX = anchor[0];
const anchorY = anchor[1];
let i = 0;
for (let j = offset; j < end; j += stride) {
const deltaX = flatCoordinates[j] - anchorX;
const deltaY = flatCoordinates[j + 1] - anchorY;
dest[i++] = anchorX + sx * deltaX;
dest[i++] = anchorY + sy * deltaY;
for (let k = j + 2; k < j + stride; ++k) {
dest[i++] = flatCoordinates[k];
}
}
if (dest && dest.length != i) {
dest.length = i;
}
return dest;
}
/**
* @param {Array} flatCoordinates Flat coordinates.
* @param {number} offset Offset.
* @param {number} end End.
* @param {number} stride Stride.
* @param {number} deltaX Delta X.
* @param {number} deltaY Delta Y.
* @param {Array} [dest] Destination.
* @return {Array} Transformed coordinates.
*/
export function translate(
flatCoordinates,
offset,
end,
stride,
deltaX,
deltaY,
dest,
) {
dest = dest ? dest : [];
let i = 0;
for (let j = offset; j < end; j += stride) {
dest[i++] = flatCoordinates[j] + deltaX;
dest[i++] = flatCoordinates[j + 1] + deltaY;
for (let k = j + 2; k < j + stride; ++k) {
dest[i++] = flatCoordinates[k];
}
}
if (dest && dest.length != i) {
dest.length = i;
}
return dest;
}