In addition to using const and let, this also upgrades our linter config and removes lint (mostly whitespace).
409 lines
13 KiB
JavaScript
409 lines
13 KiB
JavaScript
import Feature from '../../../../src/ol/Feature.js';
|
|
import Polyline, * as polyline from '../../../../src/ol/format/Polyline.js';
|
|
import LineString from '../../../../src/ol/geom/LineString.js';
|
|
import {get as getProjection, transform} from '../../../../src/ol/proj.js';
|
|
|
|
describe('ol.format.Polyline', function() {
|
|
|
|
let format;
|
|
let points;
|
|
let flatPoints, encodedFlatPoints, flippedFlatPoints;
|
|
let floats, smallFloats, encodedFloats;
|
|
let signedIntegers, encodedSignedIntegers;
|
|
let unsignedIntegers, encodedUnsignedIntegers;
|
|
let points3857;
|
|
|
|
function resetTestingData() {
|
|
format = new Polyline();
|
|
points = [
|
|
[-120.20000, 38.50000],
|
|
[-120.95000, 40.70000],
|
|
[-126.45300, 43.25200]
|
|
];
|
|
flatPoints = [
|
|
-120.20000, 38.50000,
|
|
-120.95000, 40.70000,
|
|
-126.45300, 43.25200
|
|
];
|
|
flippedFlatPoints = [
|
|
38.50000, -120.20000,
|
|
40.70000, -120.95000,
|
|
43.25200, -126.45300
|
|
];
|
|
encodedFlatPoints = '_p~iF~ps|U_ulLnnqC_mqNvxq`@';
|
|
points3857 = [
|
|
transform([-120.20000, 38.50000], 'EPSG:4326', 'EPSG:3857'),
|
|
transform([-120.95000, 40.70000], 'EPSG:4326', 'EPSG:3857'),
|
|
transform([-126.45300, 43.25200], 'EPSG:4326', 'EPSG:3857')
|
|
];
|
|
|
|
floats = [0.00, 0.15, -0.01, -0.16, 0.16, 0.01];
|
|
smallFloats = [0.00000, 0.00015, -0.00001, -0.00016, 0.00016, 0.00001];
|
|
encodedFloats = '?]@^_@A';
|
|
|
|
signedIntegers = [0, 15, -1, -16, 16, 1];
|
|
encodedSignedIntegers = '?]@^_@A';
|
|
|
|
unsignedIntegers = [0, 30, 1, 31, 32, 2, 174];
|
|
encodedUnsignedIntegers = '?]@^_@AmD';
|
|
}
|
|
|
|
// Reset testing data
|
|
beforeEach(resetTestingData);
|
|
|
|
describe('#readProjectionFromText', function() {
|
|
it('returns the default projection', function() {
|
|
const projection = format.readProjectionFromText(encodedFlatPoints);
|
|
expect(projection).to.eql(getProjection('EPSG:4326'));
|
|
});
|
|
});
|
|
|
|
describe('encodeDeltas', function() {
|
|
it('returns expected value', function() {
|
|
const encodeDeltas = polyline.encodeDeltas;
|
|
|
|
expect(encodeDeltas(flippedFlatPoints, 2)).to.eql(encodedFlatPoints);
|
|
});
|
|
});
|
|
|
|
describe('decodeDeltas', function() {
|
|
it('returns expected value', function() {
|
|
const decodeDeltas = polyline.decodeDeltas;
|
|
|
|
expect(decodeDeltas(encodedFlatPoints, 2)).to.eql(flippedFlatPoints);
|
|
});
|
|
});
|
|
|
|
|
|
describe('encodeFloats', function() {
|
|
it('returns expected value', function() {
|
|
const encodeFloats = polyline.encodeFloats;
|
|
|
|
expect(encodeFloats(smallFloats)).to.eql(encodedFloats);
|
|
|
|
resetTestingData();
|
|
expect(encodeFloats(smallFloats, 1e5)).to.eql(encodedFloats);
|
|
|
|
expect(encodeFloats(floats, 1e2)).to.eql(encodedFloats);
|
|
});
|
|
});
|
|
|
|
describe('decodeFloats', function() {
|
|
it('returns expected value', function() {
|
|
const decodeFloats = polyline.decodeFloats;
|
|
|
|
expect(decodeFloats(encodedFloats)).to.eql(smallFloats);
|
|
expect(decodeFloats(encodedFloats, 1e5)).to.eql(smallFloats);
|
|
expect(decodeFloats(encodedFloats, 1e2)).to.eql(floats);
|
|
});
|
|
});
|
|
|
|
|
|
describe('encodeSignedIntegers', function() {
|
|
it('returns expected value', function() {
|
|
const encodeSignedIntegers = polyline.encodeSignedIntegers;
|
|
|
|
expect(encodeSignedIntegers(
|
|
signedIntegers)).to.eql(encodedSignedIntegers);
|
|
});
|
|
});
|
|
|
|
describe('decodeSignedIntegers', function() {
|
|
it('returns expected value', function() {
|
|
const decodeSignedIntegers = polyline.decodeSignedIntegers;
|
|
|
|
expect(decodeSignedIntegers(
|
|
encodedSignedIntegers)).to.eql(signedIntegers);
|
|
});
|
|
});
|
|
|
|
|
|
describe('encodeUnsignedIntegers', function() {
|
|
it('returns expected value', function() {
|
|
const encodeUnsignedIntegers = polyline.encodeUnsignedIntegers;
|
|
|
|
expect(encodeUnsignedIntegers(
|
|
unsignedIntegers)).to.eql(encodedUnsignedIntegers);
|
|
});
|
|
});
|
|
|
|
describe('decodeUnsignedIntegers', function() {
|
|
it('returns expected value', function() {
|
|
const decodeUnsignedIntegers = polyline.decodeUnsignedIntegers;
|
|
|
|
expect(decodeUnsignedIntegers(
|
|
encodedUnsignedIntegers)).to.eql(unsignedIntegers);
|
|
});
|
|
});
|
|
|
|
|
|
describe('encodeFloat', function() {
|
|
it('returns expected value', function() {
|
|
const encodeFloats = polyline.encodeFloats;
|
|
|
|
expect(encodeFloats([0.00000])).to.eql('?');
|
|
expect(encodeFloats([-0.00001])).to.eql('@');
|
|
expect(encodeFloats([0.00001])).to.eql('A');
|
|
expect(encodeFloats([-0.00002])).to.eql('B');
|
|
expect(encodeFloats([0.00002])).to.eql('C');
|
|
expect(encodeFloats([0.00015])).to.eql(']');
|
|
expect(encodeFloats([-0.00016])).to.eql('^');
|
|
|
|
expect(encodeFloats([-0.1], 10)).to.eql('@');
|
|
expect(encodeFloats([0.1], 10)).to.eql('A');
|
|
|
|
expect(encodeFloats([16 * 32 / 1e5])).to.eql('__@');
|
|
expect(encodeFloats([16 * 32 * 32 / 1e5])).to.eql('___@');
|
|
|
|
// from the "Encoded Polyline Algorithm Format" page at Google
|
|
expect(encodeFloats([-179.9832104])).to.eql('`~oia@');
|
|
});
|
|
});
|
|
|
|
describe('decodeFloat', function() {
|
|
it('returns expected value', function() {
|
|
const decodeFloats = polyline.decodeFloats;
|
|
|
|
expect(decodeFloats('?')).to.eql([0.00000]);
|
|
expect(decodeFloats('@')).to.eql([-0.00001]);
|
|
expect(decodeFloats('A')).to.eql([0.00001]);
|
|
expect(decodeFloats('B')).to.eql([-0.00002]);
|
|
expect(decodeFloats('C')).to.eql([0.00002]);
|
|
expect(decodeFloats(']')).to.eql([0.00015]);
|
|
expect(decodeFloats('^')).to.eql([-0.00016]);
|
|
|
|
expect(decodeFloats('@', 10)).to.eql([-0.1]);
|
|
expect(decodeFloats('A', 10)).to.eql([0.1]);
|
|
|
|
expect(decodeFloats('__@')).to.eql([16 * 32 / 1e5]);
|
|
expect(decodeFloats('___@')).to.eql([16 * 32 * 32 / 1e5]);
|
|
|
|
// from the "Encoded Polyline Algorithm Format" page at Google
|
|
expect(decodeFloats('`~oia@')).to.eql([-179.98321]);
|
|
});
|
|
});
|
|
|
|
|
|
describe('encodeSignedInteger', function() {
|
|
it('returns expected value', function() {
|
|
const encodeSignedIntegers = polyline.encodeSignedIntegers;
|
|
|
|
expect(encodeSignedIntegers([0])).to.eql('?');
|
|
expect(encodeSignedIntegers([-1])).to.eql('@');
|
|
expect(encodeSignedIntegers([1])).to.eql('A');
|
|
expect(encodeSignedIntegers([-2])).to.eql('B');
|
|
expect(encodeSignedIntegers([2])).to.eql('C');
|
|
expect(encodeSignedIntegers([15])).to.eql(']');
|
|
expect(encodeSignedIntegers([-16])).to.eql('^');
|
|
|
|
expect(encodeSignedIntegers([16])).to.eql('_@');
|
|
expect(encodeSignedIntegers([16 * 32])).to.eql('__@');
|
|
expect(encodeSignedIntegers([16 * 32 * 32])).to.eql('___@');
|
|
});
|
|
});
|
|
|
|
describe('decodeSignedInteger', function() {
|
|
it('returns expected value', function() {
|
|
const decodeSignedIntegers = polyline.decodeSignedIntegers;
|
|
|
|
expect(decodeSignedIntegers('?')).to.eql([0]);
|
|
expect(decodeSignedIntegers('@')).to.eql([-1]);
|
|
expect(decodeSignedIntegers('A')).to.eql([1]);
|
|
expect(decodeSignedIntegers('B')).to.eql([-2]);
|
|
expect(decodeSignedIntegers('C')).to.eql([2]);
|
|
expect(decodeSignedIntegers(']')).to.eql([15]);
|
|
expect(decodeSignedIntegers('^')).to.eql([-16]);
|
|
|
|
expect(decodeSignedIntegers('_@')).to.eql([16]);
|
|
expect(decodeSignedIntegers('__@')).to.eql([16 * 32]);
|
|
expect(decodeSignedIntegers('___@')).to.eql([16 * 32 * 32]);
|
|
});
|
|
});
|
|
|
|
|
|
describe('encodeUnsignedInteger', function() {
|
|
it('returns expected value', function() {
|
|
const encodeUnsignedInteger = polyline.encodeUnsignedInteger;
|
|
|
|
expect(encodeUnsignedInteger(0)).to.eql('?');
|
|
expect(encodeUnsignedInteger(1)).to.eql('@');
|
|
expect(encodeUnsignedInteger(2)).to.eql('A');
|
|
expect(encodeUnsignedInteger(30)).to.eql(']');
|
|
expect(encodeUnsignedInteger(31)).to.eql('^');
|
|
expect(encodeUnsignedInteger(32)).to.eql('_@');
|
|
|
|
expect(encodeUnsignedInteger(32 * 32)).to.eql('__@');
|
|
expect(encodeUnsignedInteger(5 * 32 * 32)).to.eql('__D');
|
|
expect(encodeUnsignedInteger(32 * 32 * 32)).to.eql('___@');
|
|
|
|
// from the "Encoded Polyline Algorithm Format" page at Google
|
|
expect(encodeUnsignedInteger(174)).to.eql('mD');
|
|
});
|
|
});
|
|
|
|
describe('decodeUnsignedInteger', function() {
|
|
it('returns expected value', function() {
|
|
const decodeUnsignedIntegers = polyline.decodeUnsignedIntegers;
|
|
|
|
expect(decodeUnsignedIntegers('?')).to.eql([0]);
|
|
expect(decodeUnsignedIntegers('@')).to.eql([1]);
|
|
expect(decodeUnsignedIntegers('A')).to.eql([2]);
|
|
expect(decodeUnsignedIntegers(']')).to.eql([30]);
|
|
expect(decodeUnsignedIntegers('^')).to.eql([31]);
|
|
expect(decodeUnsignedIntegers('_@')).to.eql([32]);
|
|
|
|
expect(decodeUnsignedIntegers('__@')).to.eql([32 * 32]);
|
|
expect(decodeUnsignedIntegers('__D')).to.eql([5 * 32 * 32]);
|
|
expect(decodeUnsignedIntegers('___@')).to.eql([32 * 32 * 32]);
|
|
|
|
// from the "Encoded Polyline Algorithm Format" page at Google
|
|
expect(decodeUnsignedIntegers('mD')).to.eql([174]);
|
|
});
|
|
});
|
|
|
|
describe('#readFeature', function() {
|
|
|
|
it('returns the expected feature', function() {
|
|
const feature = format.readFeature(encodedFlatPoints);
|
|
expect(feature).to.be.an(Feature);
|
|
const geometry = feature.getGeometry();
|
|
expect(geometry).to.be.an(LineString);
|
|
expect(geometry.getFlatCoordinates()).to.eql(flatPoints);
|
|
});
|
|
|
|
it('transforms and returns the expected feature', function() {
|
|
const feature = format.readFeature(encodedFlatPoints, {
|
|
featureProjection: 'EPSG:3857'
|
|
});
|
|
expect(feature).to.be.an(Feature);
|
|
const geometry = feature.getGeometry();
|
|
expect(geometry).to.be.an(LineString);
|
|
expect(geometry.getCoordinates()).to.eql(points3857);
|
|
});
|
|
|
|
});
|
|
|
|
describe('#readFeatures', function() {
|
|
|
|
it('returns the expected feature', function() {
|
|
const features = format.readFeatures(encodedFlatPoints);
|
|
expect(features).to.be.an(Array);
|
|
expect(features).to.have.length(1);
|
|
const feature = features[0];
|
|
expect(feature).to.be.an(Feature);
|
|
const geometry = feature.getGeometry();
|
|
expect(geometry).to.be.an(LineString);
|
|
expect(geometry.getFlatCoordinates()).to.eql(flatPoints);
|
|
});
|
|
|
|
it('transforms and returns the expected features', function() {
|
|
const features = format.readFeatures(encodedFlatPoints, {
|
|
featureProjection: 'EPSG:3857'
|
|
});
|
|
expect(features).to.be.an(Array);
|
|
expect(features).to.have.length(1);
|
|
const feature = features[0];
|
|
expect(feature).to.be.an(Feature);
|
|
const geometry = feature.getGeometry();
|
|
expect(geometry).to.be.an(LineString);
|
|
expect(geometry.getCoordinates()).to.eql(points3857);
|
|
});
|
|
|
|
});
|
|
|
|
describe('#readGeometry', function() {
|
|
|
|
it('returns the expected geometry', function() {
|
|
const geometry = format.readGeometry(encodedFlatPoints);
|
|
expect(geometry).to.be.an(LineString);
|
|
expect(geometry.getFlatCoordinates()).to.eql(flatPoints);
|
|
});
|
|
|
|
it('parses XYZ linestring', function() {
|
|
const xyz = polyline.encodeDeltas([
|
|
38.500, -120.200, 100,
|
|
40.700, -120.950, 200,
|
|
43.252, -126.453, 20
|
|
], 3);
|
|
const format = new Polyline({
|
|
geometryLayout: 'XYZ'
|
|
});
|
|
|
|
const geometry = format.readGeometry(xyz);
|
|
expect(geometry.getLayout()).to.eql('XYZ');
|
|
expect(geometry.getCoordinates()).to.eql([
|
|
[-120.200, 38.500, 100],
|
|
[-120.950, 40.700, 200],
|
|
[-126.453, 43.252, 20]
|
|
]);
|
|
});
|
|
|
|
it('transforms and returns the expected geometry', function() {
|
|
const geometry = format.readGeometry(encodedFlatPoints, {
|
|
featureProjection: 'EPSG:3857'
|
|
});
|
|
expect(geometry).to.be.an(LineString);
|
|
expect(geometry.getCoordinates()).to.eql(points3857);
|
|
});
|
|
|
|
});
|
|
|
|
describe('#readProjection', function() {
|
|
|
|
it('returns the expected projection', function() {
|
|
const projection = format.readProjection(encodedFlatPoints);
|
|
expect(projection).to.be(getProjection('EPSG:4326'));
|
|
});
|
|
|
|
});
|
|
|
|
describe('#writeFeature', function() {
|
|
|
|
it('returns the expected text', function() {
|
|
const feature = new Feature(new LineString(points));
|
|
expect(format.writeFeature(feature)).to.be(encodedFlatPoints);
|
|
});
|
|
|
|
it('transforms and returns the expected text', function() {
|
|
const feature = new Feature(new LineString(points3857));
|
|
expect(format.writeFeature(feature, {
|
|
featureProjection: 'EPSG:3857'
|
|
})).to.be(encodedFlatPoints);
|
|
});
|
|
|
|
});
|
|
|
|
describe('#writeFeature', function() {
|
|
|
|
it('returns the expected text', function() {
|
|
const features = [new Feature(new LineString(points))];
|
|
expect(format.writeFeatures(features)).to.be(encodedFlatPoints);
|
|
});
|
|
|
|
it('transforms and returns the expected text', function() {
|
|
const features = [new Feature(new LineString(points3857))];
|
|
expect(format.writeFeatures(features, {
|
|
featureProjection: 'EPSG:3857'
|
|
})).to.be(encodedFlatPoints);
|
|
});
|
|
|
|
});
|
|
|
|
describe('#writeGeometry', function() {
|
|
|
|
it('returns the expected text', function() {
|
|
const geometry = new LineString(points);
|
|
expect(format.writeGeometry(geometry)).to.be(encodedFlatPoints);
|
|
});
|
|
|
|
it('transforms and returns the expected text', function() {
|
|
const geometry = new LineString(points3857);
|
|
expect(format.writeGeometry(geometry, {
|
|
featureProjection: 'EPSG:3857'
|
|
})).to.be(encodedFlatPoints);
|
|
});
|
|
|
|
});
|
|
|
|
});
|