polyline: Added encode/decodeUnsignedIntegers() functions

This commit is contained in:
Tobias Bieniek
2013-03-10 18:48:49 +01:00
parent ce619871c2
commit 78278798bb
2 changed files with 69 additions and 0 deletions

View File

@@ -72,6 +72,52 @@ ol.parser.polyline.decodeFlatCoordinates = function(encoded, opt_dimension) {
};
/**
* Encode a list of unsigned integers and return an encoded string
*
* @param {Array.<number>} numbers A list of unsigned integers.
* @return {string} The encoded string.
*/
ol.parser.polyline.encodeUnsignedIntegers = function(numbers) {
var encoded = '';
var numbersLength = numbers.length;
for (var i = 0; i < numbersLength; ++i) {
encoded += ol.parser.polyline.encodeUnsignedInteger(numbers[i]);
}
return encoded;
};
/**
* Decode a list of unsigned integers from an encoded string
*
* @param {string} encoded An encoded string.
* @return {Array.<number>} A list of unsigned integers.
*/
ol.parser.polyline.decodeUnsignedIntegers = function(encoded) {
var numbers = new Array();
var encodedLength = encoded.length;
for (var i = 0; i < encodedLength;) {
var result = 0;
var shift = 0;
var b;
do {
b = encoded.charCodeAt(i++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
numbers.push(result);
}
return numbers;
};
/**
* Encode one single floating point number and return an encoded string
*

View File

@@ -26,6 +26,29 @@ describe('ol.parser.polyline', function() {
});
});
var unsignedIntegers = [0, 30, 1, 31, 32, 2, 174];
var encodedUnsignedIntegers = '?]@^_@AmD';
describe('encodeUnsignedIntegers', function() {
it('returns expected value', function() {
var encodeUnsignedIntegers = ol.parser.polyline.encodeUnsignedIntegers;
expect(encodeUnsignedIntegers(
unsignedIntegers)).toEqual(encodedUnsignedIntegers);
});
});
describe('decodeUnsignedIntegers', function() {
it('returns expected value', function() {
var decodeUnsignedIntegers = ol.parser.polyline.decodeUnsignedIntegers;
expect(decodeUnsignedIntegers(
encodedUnsignedIntegers)).toEqual(unsignedIntegers);
});
});
describe('encodeFloat', function() {
it('returns expected value', function() {
var encodeFloat = ol.parser.polyline.encodeFloat;