blob: f34804925cfcc247b80e5fc4006e11b81e5e2a54 [file] [log] [blame]
var parseGpx = require('gpx-parse');
var baiduMap = require('baidumap');
var fs = require('fs');
var glob = require('glob');
var json = {};
var bmap = baiduMap.create({
'ak': 'FFc930c7bb3fd0eb4df8a976ff36ff09'
});
function convertPoints(points) {
return new Promise(function (resolve, reject) {
bmap.geoconv({
coords: points.map(function (pt) {
return pt.join(',');
}).join(';')
}, function (err, result) {
resolve(result);
});
});
}
glob('hangzhou_hiking/*.gpx', function (err, files) {
Promise.all(files.map(function (file) {
return getGpxPoints(file);
})).then(function (tracks) {
fs.writeFileSync('hangzhou-tracks.json', JSON.stringify(tracks), 'utf-8');
});
});
function getGpxPoints(fileName) {
return new Promise(function (resolve, reject) {
parseGpx.parseGpxFromFile(fileName, function (error, res) {
var points = res.tracks[0].segments[0].map(function (seg) {
return [seg.lon, seg.lat];
});
var promises = [];
for (var i = 0; i < points.length; i+=100) {
promises.push(convertPoints(points.slice(i, i + 100)));
}
// Assume waypoints has less number than 100
promises.unshift(convertPoints(res.waypoints.map(function (wp) {
return [wp.lon, wp.lat];
})));
Promise.all(promises).then(function (results) {
json.track = [].concat.apply([], results.slice(1).map(function (item) {
item = JSON.parse(item);
if (item.status !== 0) {
throw new Error(item.status);
}
return item.result.map(function (coord) {
return [coord.x, coord.y];
});
})).map(function (pt, idx) {
return {
coord: pt,
elevation: res.tracks[0].segments[0][idx].elevation
};
});
resolve(json.track);
// fs.writeFileSync('xihu-track.json', JSON.stringify(json), 'utf-8');
}, function (error) {
console.log(error);
}).catch(function (error) {
console.error(error);
});
});
});
}