Skip to content

Commit

Permalink
Merge pull request #3 from KaiVolland/enhancements1
Browse files Browse the repository at this point in the history
General enhancements
  • Loading branch information
KaiVolland committed Apr 10, 2019
2 parents 7ab3509 + 141cbcf commit a61a77e
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 36 deletions.
1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
"dependencies": {
"@types/geojson": "7946.0.7",
"@types/jest": "24.0.11",
"@types/json-schema": "7.0.3",
"@types/node": "11.13.2",
"@types/shpjs": "3.4.0",
"geostyler-data": "1.0.0",
Expand Down
55 changes: 43 additions & 12 deletions src/ShapefileDataParser.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,24 +69,55 @@ beforeEach(() => {
parser = new ShapefileDataParser();
});

it('ShapefileDataParser is defined', () => {
expect(ShapefileDataParser).toBeDefined();
});
describe('ShapefileDataParser', () => {

it('…is defined', () => {
expect(ShapefileDataParser).toBeDefined();
});

describe('ShapefileDataParser implements DataParser', () => {
describe('implements DataParser', () => {

it('…readData is defined', () => {
expect(parser.readData).toBeDefined();
});

it('readData is defined', () => {
expect(parser.readData).toBeDefined();
});

});
describe('constructor', () => {

describe('readData implementation', () => {
it('…creates a GeoJsonDataParser with the passed projections', () => {
const parserWithProjection = new ShapefileDataParser('EPSG:3857', 'EPSG:4326');
expect(parserWithProjection._geoJsonParser.sourceProjection).toBe('EPSG:3857');
expect(parserWithProjection._geoJsonParser.targetProjection).toBe('EPSG:4326');
});

it('can read a Buffer', async () => {
const buffer = readFileSync(path.resolve(__dirname, '../data/point.zip'));
const data = await parser.readData(buffer);
expect(data).toEqual(expectedData);
});

describe('readData implementation', () => {

it('…can read a Buffer', async () => {
const buffer = readFileSync(path.resolve(__dirname, '../data/point.zip'));
const data = await parser.readData(buffer);
expect(data).toEqual(expectedData);
});

it('…rejects the promise if called with invalid (Array)Buffer', (done) => {
expect.assertions(1);
const buffer = new ArrayBuffer(0);
parser.readData(buffer)
.catch((e) => {
expect(e).toBeDefined();
}).finally(done);
});

it('…rejects the promise if called with invalid Argument', (done) => {
expect.assertions(1);
const buffer = undefined as unknown as ArrayBuffer;
parser.readData(buffer)
.catch((e) => {
expect(e).toBeDefined();
}).finally(done);
});

});
});
33 changes: 10 additions & 23 deletions src/ShapefileDataParser.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { DataParser, VectorData } from 'geostyler-data';
import { GeoJSON } from 'geojson';
import GeoJsonDataParser from 'geostyler-geojson-parser';
// @ts-ignore // Typing is currently wrong. See PR: https://github.com/DefinitelyTyped/DefinitelyTyped/pull/34623
import shpjs from 'shpjs';
Expand All @@ -15,39 +16,25 @@ export class ShapefileDataParser implements DataParser {

title = 'Shapefile Data Parser';

sourceProjection: string;

targetProjection: string;

_geoJsonParser: any;

constructor(sourceProj?: string, targetProj?: string) {
this._geoJsonParser = new GeoJsonDataParser();
if (sourceProj && targetProj) {
this.sourceProjection = sourceProj;
this.targetProjection = targetProj;
}
this._geoJsonParser = new GeoJsonDataParser(sourceProj, targetProj);
}

/**
*
* @param inputData
*/
async readData(array: string | Buffer | ArrayBuffer): Promise<VectorData> {
readData(array: Buffer | ArrayBuffer): Promise<VectorData> {
return new Promise<VectorData>((resolve, reject) => {
try {
shpjs(array)
.then((geojson: any) => {
if (geojson.type === 'FeatureCollection') {
resolve(this._geoJsonParser.readData(geojson));
}
})
.catch((e: any) => {
reject(e);
});
} catch (e) {
reject(e);
}
shpjs(array)
.then((geojson: GeoJSON) => {
resolve(this._geoJsonParser.readData(geojson));
})
.catch((e: any) => {
reject(e);
});
});
}

Expand Down

0 comments on commit a61a77e

Please sign in to comment.