polyline: Added encode/decodeFloat() functions

This commit is contained in:
Tobias Bieniek
2013-03-09 23:17:29 +01:00
parent e802cc3d56
commit 04d764f4f3
2 changed files with 67 additions and 0 deletions

View File

@@ -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
*

View File

@@ -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;