polyline: Added encode/decodeFloat() functions
This commit is contained in:
@@ -1,6 +1,33 @@
|
||||
goog.provide('ol.parser.polyline');
|
||||
|
||||
|
||||
/**
|
||||
* Encode one single floating point number and return an encoded string
|
||||
*
|
||||
* @param {number} num Floating point number that should be encoded.
|
||||
* @param {number=} opt_factor The factor by which num will be multiplied.
|
||||
* The remaining decimal places will get rounded away.
|
||||
* @return {string} The encoded string.
|
||||
*/
|
||||
ol.parser.polyline.encodeFloat = function(num, opt_factor) {
|
||||
num = Math.round(num * (opt_factor || 1e5));
|
||||
return ol.parser.polyline.encodeSignedInteger(num);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Decode one single floating point number from an encoded string
|
||||
*
|
||||
* @param {string} encoded An encoded string.
|
||||
* @param {number=} opt_factor The factor by which the result will be divided.
|
||||
* @return {number} The decoded floating point number.
|
||||
*/
|
||||
ol.parser.polyline.decodeFloat = function(encoded, opt_factor) {
|
||||
var result = ol.parser.polyline.decodeSignedInteger(encoded);
|
||||
return result / (opt_factor || 1e5);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Encode one single signed integer and return an encoded string
|
||||
*
|
||||
|
||||
@@ -2,6 +2,46 @@ goog.provide('ol.test.parser.polyline');
|
||||
|
||||
describe('ol.parser.polyline', function() {
|
||||
|
||||
describe('encodeFloat', function() {
|
||||
it('returns expected value', function() {
|
||||
var encodeFloat = ol.parser.polyline.encodeFloat;
|
||||
|
||||
expect(encodeFloat(0.00000)).toEqual('?');
|
||||
expect(encodeFloat(-0.00001)).toEqual('@');
|
||||
expect(encodeFloat(0.00001)).toEqual('A');
|
||||
expect(encodeFloat(-0.00002)).toEqual('B');
|
||||
expect(encodeFloat(0.00002)).toEqual('C');
|
||||
expect(encodeFloat(0.00015)).toEqual(']');
|
||||
expect(encodeFloat(-0.00016)).toEqual('^');
|
||||
|
||||
expect(encodeFloat(-0.1, 10)).toEqual('@');
|
||||
expect(encodeFloat(0.1, 10)).toEqual('A');
|
||||
|
||||
expect(encodeFloat(16 * 32 / 1e5)).toEqual('__@');
|
||||
expect(encodeFloat(16 * 32 * 32 / 1e5)).toEqual('___@');
|
||||
});
|
||||
});
|
||||
|
||||
describe('decodeFloat', function() {
|
||||
it('returns expected value', function() {
|
||||
var decodeFloat = ol.parser.polyline.decodeFloat;
|
||||
|
||||
expect(decodeFloat('?')).toEqual(0.00000);
|
||||
expect(decodeFloat('@')).toEqual(-0.00001);
|
||||
expect(decodeFloat('A')).toEqual(0.00001);
|
||||
expect(decodeFloat('B')).toEqual(-0.00002);
|
||||
expect(decodeFloat('C')).toEqual(0.00002);
|
||||
expect(decodeFloat(']')).toEqual(0.00015);
|
||||
expect(decodeFloat('^')).toEqual(-0.00016);
|
||||
|
||||
expect(decodeFloat('@', 10)).toEqual(-0.1);
|
||||
expect(decodeFloat('A', 10)).toEqual(0.1);
|
||||
|
||||
expect(decodeFloat('__@')).toEqual(16 * 32 / 1e5);
|
||||
expect(decodeFloat('___@')).toEqual(16 * 32 * 32 / 1e5);
|
||||
});
|
||||
});
|
||||
|
||||
describe('encodeSignedInteger', function() {
|
||||
it('returns expected value', function() {
|
||||
var encodeSignedInteger = ol.parser.polyline.encodeSignedInteger;
|
||||
|
||||
Reference in New Issue
Block a user