Skip to content

Commit

Permalink
Revove geocoder
Browse files Browse the repository at this point in the history
  • Loading branch information
lgaticaq committed Feb 29, 2016
1 parent 0c26860 commit fc73184
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 116 deletions.
4 changes: 2 additions & 2 deletions example.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const tz = require('tz-parser');
const meitrack = require('meitrack-parser');

const raw = new Buffer('$$A138,862170013556541,AAA,35,7.092076,79.960473,140412132808,A,10,9,57,275,1,14,5783799,7403612,413|1|F6E0|3933,0000,000B|0009||02D8|0122,*EE\r\n');
const data = tz.parse(raw);
const data = meitrack.parse(raw);
15 changes: 5 additions & 10 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,25 +33,20 @@
},
"homepage": "https://github.com/lgaticaq/meitrack-parser#readme",
"dependencies": {
"bluebird": "^3.3.1",
"hiredis": "^0.4.1",
"moment": "^2.11.2",
"node-geocoder": "^3.7.0",
"pad": "^1.0.0",
"redis-url": "^1.2.1"
"pad": "^1.0.0"
},
"devDependencies": {
"babel-cli": "^6.5.1",
"babel-core": "^6.5.2",
"babel-preset-es2015": "^6.5.0",
"babel-cli": "^6.6.0",
"babel-core": "^6.6.0",
"babel-preset-es2015": "^6.6.0",
"chai": "^3.5.0",
"eslint": "1.10.3",
"eslint": "2.2.0",
"mocha": "^2.4.5",
"rimraf": "^2.5.2"
},
"eslintConfig": {
"rules": {
"strict": 0,
"indent": [
2,
2
Expand Down
67 changes: 6 additions & 61 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,6 @@

import pad from 'pad';
import moment from 'moment';
import redisUrl from 'redis-url';
import nodeGeocoder from 'node-geocoder';
import Promise from 'bluebird';

let client;

const patterns = {
mvt380: /^\$\$([\x41-\x7A])(\d{1,3}),(\d{15}),([0-9A-F]{3}),(\d{1,3}),([-]?\d+\.\d+),([-]?\d+\.\d+),(\d{12}),([AV]),(\d{1,3}),(\d{1,2}),(\d+(\.\d+)?),(\d+(\.\d+)?),(\d+(\.\d+)?),(\d+(\.\d+)?),(\d+(\.\d+)?),(\d+),(\d{3})\|(\d{1,3})\|([0-9A-F]{4})\|([0-9A-F]{4}),([0-9A-F]{4}),([0-9A-F]{1,4})?\|([0-9A-F]{1,4})?\|([0-9A-F]{1,4})?\|([0-9A-F]{1,4})\|([0-9A-F]{1,4}),([0-9A-F]{8})?,?([0-9A-F]+)?,?(\d{1,2})?,?([0-9A-F]{4})?,?([0-9A-F]{6})?\|?([0-9A-F]{6})?\|?([0-9A-F]{6})?\|?\*([0-9A-F]{2})\r\n$/
Expand Down Expand Up @@ -135,66 +130,16 @@ const getMvt380 = (raw) => {
return data;
};

const setCache = (uri) => {
try {
client = redisUrl.connect(uri);
Promise.promisifyAll(Object.getPrototypeOf(client));
} catch (err) {
throw err;
}
};

const getReverse = (lat, lon) => {
return new Promise((resolve, reject) => {
const geocoderProvider = 'google';
const httpAdapter = 'http';
const geocoder = nodeGeocoder(geocoderProvider, httpAdapter);
geocoder.reverse({lat: lat, lon: lon}).then(res => {
if (res.length === 0) resolve(null);
resolve(res[0].formattedAddress.split(',').map(x => x.trim()).slice(0, 2).join(', '));
}).catch(reject);
});
};

const getAddress = (lat, lng) => {
return new Promise((resolve, reject) => {
if (client) {
client.getAsync(`geocoder:${lat}:${lng}`).then(reply => {
if (reply) resolve(reply);
getReverse(lat, lng).then(address => {
if (!address) resolve(null);
client.set(`geocoder:${lat}:${lng}`, address);
resolve(address);
}).catch(reject);
}).catch(reject);
} else {
getReverse(lat, lng).then(resolve).catch(reject);
}
});
};

const parse = (raw) => {
return new Promise((resolve) => {
let result = {type: 'UNKNOWN', raw: raw.toString()};
if (patterns.mvt380.test(raw.toString())) {
result = getMvt380(raw);
const [lng, lat] = result.loc.coordinates;
getAddress(lat, lng).then(address => {
result.address = address;
resolve(result);
}).catch(() => {
resolve(result);
});
}
resolve(result);
return result;
});
let result = {type: 'UNKNOWN', raw: raw.toString()};
if (patterns.mvt380.test(raw.toString())) {
result = getMvt380(raw);
}
return result;
};

module.exports = {
parse: parse,
patterns: patterns,
getMvt380: getMvt380,
setCache: setCache,
getAddress: getAddress
getMvt380: getMvt380
};
81 changes: 38 additions & 43 deletions test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,50 +5,45 @@ import {expect} from 'chai';

describe('tz-parzer', () => {
describe('parse', () => {
it('should return the raw data parsed', (done) => {
it('should return the raw data parsed', () => {
const raw = new Buffer('$$A138,862170013556541,AAA,35,7.092076,79.960473,140412132808,A,10,9,57,275,1,14,5783799,7403612,413|1|F6E0|3933,0000,000B|0009||02D8|0122,*EE\r\n');
parser.parse(raw).then(data => {
expect(data.raw).to.eql(raw.toString());
expect(data.type).to.eql('MVT380');
expect(data.imei).to.eql(862170013556541);
expect(data.command).to.eql('AAA');
expect(data.event).to.eql('timeIntervalTracking');
expect(data.loc.type).to.eql('Point');
expect(data.loc.coordinates).to.eql([79.960473, 7.092076]);
expect(data.gpsSignal).to.eql('A');
expect(data.satellites).to.eql(10);
expect(data.gsmSignal).to.eql(9);
expect(data.speed).to.eql(57);
expect(data.direction).to.eql(275);
expect(data.hdop).to.eql(1);
expect(data.altitude).to.eql(14);
expect(data.odometer).to.eql(5783799);
expect(data.runtime).to.eql(7403612);
expect(data.mcc).to.eql('413');
expect(data.mnc).to.eql('1');
expect(data.lac).to.eql(63200);
expect(data.ci).to.eql(14643);
expect(data.status.input['1']).to.be.false;
expect(data.status.input['2']).to.be.false;
expect(data.status.input['3']).to.be.false;
expect(data.status.input['4']).to.be.false;
expect(data.status.input['5']).to.be.false;
expect(data.status.input['6']).to.be.false;
expect(data.status.input['7']).to.be.false;
expect(data.status.input['8']).to.be.false;
expect(data.status.output['1']).to.be.false;
expect(data.status.output['2']).to.be.false;
expect(data.status.output['3']).to.be.false;
expect(data.status.output['4']).to.be.false;
expect(data.status.output['5']).to.be.false;
expect(data.status.output['6']).to.be.false;
expect(data.status.output['7']).to.be.false;
expect(data.status.output['8']).to.be.false;
done();
}).catch(err => {
expect(err).to.be.undefined;
done();
});
const data = parser.parse(raw);
expect(data.raw).to.eql(raw.toString());
expect(data.type).to.eql('MVT380');
expect(data.imei).to.eql(862170013556541);
expect(data.command).to.eql('AAA');
expect(data.event).to.eql('timeIntervalTracking');
expect(data.loc.type).to.eql('Point');
expect(data.loc.coordinates).to.eql([79.960473, 7.092076]);
expect(data.gpsSignal).to.eql('A');
expect(data.satellites).to.eql(10);
expect(data.gsmSignal).to.eql(9);
expect(data.speed).to.eql(57);
expect(data.direction).to.eql(275);
expect(data.hdop).to.eql(1);
expect(data.altitude).to.eql(14);
expect(data.odometer).to.eql(5783799);
expect(data.runtime).to.eql(7403612);
expect(data.mcc).to.eql('413');
expect(data.mnc).to.eql('1');
expect(data.lac).to.eql(63200);
expect(data.ci).to.eql(14643);
expect(data.status.input['1']).to.be.false;
expect(data.status.input['2']).to.be.false;
expect(data.status.input['3']).to.be.false;
expect(data.status.input['4']).to.be.false;
expect(data.status.input['5']).to.be.false;
expect(data.status.input['6']).to.be.false;
expect(data.status.input['7']).to.be.false;
expect(data.status.input['8']).to.be.false;
expect(data.status.output['1']).to.be.false;
expect(data.status.output['2']).to.be.false;
expect(data.status.output['3']).to.be.false;
expect(data.status.output['4']).to.be.false;
expect(data.status.output['5']).to.be.false;
expect(data.status.output['6']).to.be.false;
expect(data.status.output['7']).to.be.false;
expect(data.status.output['8']).to.be.false;
});
});
});

0 comments on commit fc73184

Please sign in to comment.