polyline: Added decodeSigned/UnsignedInteger() functions
This commit is contained in:
@@ -16,6 +16,18 @@ ol.parser.polyline.encodeSignedInteger = function(num) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Decode one single signed integer from an encoded string
|
||||||
|
*
|
||||||
|
* @param {string} encoded An encoded string.
|
||||||
|
* @return {number} The decoded signed integer.
|
||||||
|
*/
|
||||||
|
ol.parser.polyline.decodeSignedInteger = function(encoded) {
|
||||||
|
var result = ol.parser.polyline.decodeUnsignedInteger(encoded);
|
||||||
|
return ((result & 1) ? ~(result >> 1) : (result >> 1));
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Encode one single unsigned integer and return an encoded string
|
* Encode one single unsigned integer and return an encoded string
|
||||||
*
|
*
|
||||||
@@ -33,3 +45,24 @@ ol.parser.polyline.encodeUnsignedInteger = function(num) {
|
|||||||
encodeString += (String.fromCharCode(value));
|
encodeString += (String.fromCharCode(value));
|
||||||
return encodeString;
|
return encodeString;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Decode one single unsigned integer from an encoded string
|
||||||
|
*
|
||||||
|
* @param {string} encoded An encoded string.
|
||||||
|
* @return {number} The decoded unsigned integer.
|
||||||
|
*/
|
||||||
|
ol.parser.polyline.decodeUnsignedInteger = function(encoded) {
|
||||||
|
var result = 0;
|
||||||
|
var shift = 0;
|
||||||
|
|
||||||
|
var b, i = 0;
|
||||||
|
do {
|
||||||
|
b = encoded.charCodeAt(i++) - 63;
|
||||||
|
result |= (b & 0x1f) << shift;
|
||||||
|
shift += 5;
|
||||||
|
} while (b >= 0x20);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|||||||
@@ -20,6 +20,24 @@ describe('ol.parser.polyline', function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('decodeSignedInteger', function() {
|
||||||
|
it('returns expected value', function() {
|
||||||
|
var decodeSignedInteger = ol.parser.polyline.decodeSignedInteger;
|
||||||
|
|
||||||
|
expect(decodeSignedInteger('?')).toEqual(0);
|
||||||
|
expect(decodeSignedInteger('@')).toEqual(-1);
|
||||||
|
expect(decodeSignedInteger('A')).toEqual(1);
|
||||||
|
expect(decodeSignedInteger('B')).toEqual(-2);
|
||||||
|
expect(decodeSignedInteger('C')).toEqual(2);
|
||||||
|
expect(decodeSignedInteger(']')).toEqual(15);
|
||||||
|
expect(decodeSignedInteger('^')).toEqual(-16);
|
||||||
|
|
||||||
|
expect(decodeSignedInteger('_@')).toEqual(16);
|
||||||
|
expect(decodeSignedInteger('__@')).toEqual(16 * 32);
|
||||||
|
expect(decodeSignedInteger('___@')).toEqual(16 * 32 * 32);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('encodeUnsignedInteger', function() {
|
describe('encodeUnsignedInteger', function() {
|
||||||
it('returns expected value', function() {
|
it('returns expected value', function() {
|
||||||
var encodeUnsignedInteger = ol.parser.polyline.encodeUnsignedInteger;
|
var encodeUnsignedInteger = ol.parser.polyline.encodeUnsignedInteger;
|
||||||
@@ -36,6 +54,23 @@ describe('ol.parser.polyline', function() {
|
|||||||
expect(encodeUnsignedInteger(32 * 32 * 32)).toEqual('___@');
|
expect(encodeUnsignedInteger(32 * 32 * 32)).toEqual('___@');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('decodeUnsignedInteger', function() {
|
||||||
|
it('returns expected value', function() {
|
||||||
|
var decodeUnsignedInteger = ol.parser.polyline.decodeUnsignedInteger;
|
||||||
|
|
||||||
|
expect(decodeUnsignedInteger('?')).toEqual(0);
|
||||||
|
expect(decodeUnsignedInteger('@')).toEqual(1);
|
||||||
|
expect(decodeUnsignedInteger('A')).toEqual(2);
|
||||||
|
expect(decodeUnsignedInteger(']')).toEqual(30);
|
||||||
|
expect(decodeUnsignedInteger('^')).toEqual(31);
|
||||||
|
expect(decodeUnsignedInteger('_@')).toEqual(32);
|
||||||
|
|
||||||
|
expect(decodeUnsignedInteger('__@')).toEqual(32 * 32);
|
||||||
|
expect(decodeUnsignedInteger('__D')).toEqual(5 * 32 * 32);
|
||||||
|
expect(decodeUnsignedInteger('___@')).toEqual(32 * 32 * 32);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
goog.require('ol.parser.polyline');
|
goog.require('ol.parser.polyline');
|
||||||
|
|||||||
Reference in New Issue
Block a user