goog.provide('ol.geom.flat.straightchunk');
/**
* @param {number} angleDelta Maximum acceptable angle delta between segments.
* @param {number} length Required length of the resulting chung.
* @param {Array.<number>} flatCoordinates Flat coordinates.
* @param {number} offset Offset.
* @param {number} end End.
* @param {number} stride Stride.
* @return {Array.<number>} Offset and end of the longest suitable chunk of the
* given `flatCoordinates`, or `null` if there is none.
*/
ol.geom.flat.straightchunk.lineString = function(angleDelta, length, flatCoordinates, offset, end, stride) {
var x1 = flatCoordinates[offset];
var y1 = flatCoordinates[offset + 1];
var chunkOffset = offset;
var chunkLength = 0;
var chunk = [];
var m = 0;
var acos, i, m12, x21, y21;
for (i = offset + stride; i < end; i += stride) {
var x2 = flatCoordinates[i];
var y2 = flatCoordinates[i + 1];
var x32 = x2 - x1;
var y32 = y2 - y1;
var m23 = Math.sqrt(x32 * x32 + y32 * y32);
if (m12 !== undefined) {
m += m23;
acos = Math.acos((x21 * x32 + y21 * y32) / (m12 * m23));
if (acos > angleDelta) {
Iif (m >= chunkLength && m >= length) {
chunk[0] = chunkOffset;
chunk[1] = i + stride;
chunkLength = m;
}
m = 0;
chunkOffset = i;
}
}
x21 = x32;
y21 = y32;
m12 = m23;
}
return chunk.length == 2 ? chunk : null;
};
|