根据时间轴的特性,如果您需要时间轴变化的同时,等值面的数据也发生变化,那么可以开发一个接口或者数据库,能根据时间参数来获取不同时间段的全国各个监测站点的数据。本文档为您介绍如何使用Node.js完成接口的开发和发布(您也可以使用其他的开发语言,原理相同)。
背景信息
推荐您将上一步已经处理完成的数据包装成一个简单的接口,并在DataV地图组件的数据面板配置API数据源,调用此接口,来完成这个需求。
接口信息如下:
- 请求地址:/api
- 请求方式:GET
- 请求参数:
- 参数名称:date。
- 参数类型:string,示例2017012722,时间格式为YYYYmmDDHH。
操作步骤
- 安装Node.js(包括npm)并使用npm install <module_name>命令安装依赖模块。
- 处理下载的所有数据,Node.js提供了一个glob模块可以对文件夹下的所有数据进行批量处理。
var fs = require('fs');
var csv = require("fast-csv");
var glob = require('glob');
var mapdata = require('./站点列表经纬度映射.json');
glob("./站点_20170101-20170202/*.csv", function (err, files) {
files.forEach(function (file) {
var filename = file.replace(/^.*[\\\/]/, '').split('.')[0].split('_')[2];
var datas = {};
csv
.fromPath(file, { headers: true, objectMode: true })
.on("data", function (data) {
if (data.type === 'AQI') {
datas[data.hour] = [];
for (var key in data) {
if (mapdata[key]) {
datas[data.hour].push({
name: mapdata[key].name,
value: +data[key],
code: mapdata[key].code,
city: mapdata[key].city,
lng: +mapdata[key].lng,
lat: +mapdata[key].lat
})
}
}
}
})
.on("end", function () {
fs.writeFile('./data/' + filename + '.json', JSON.stringify(datas));
console.log("done");
});
});
});
运行结果如下。
- 使用glob模块对数据进行一次整合。
将如下示例程序保存为
js
脚本文件,并在
Node.js
环境中运行。
//以下方式不适用大批量的数据。
//将文件名也就是日期作为key,对应的内容作为值,得到一个all.json整合文件。
var fs = require('fs');
var csv = require("fast-csv");
var glob = require('glob');
glob("./data/*.json", function (err, files) {
var datas = {};
files.forEach(function (file) {
var filename = file.replace(/^.*[\\\/]/, '').split('.')[0];
datas[filename] = require(file);
});
fs.writeFile('./data/all.json', JSON.stringify(datas));
console.log('done');
});
- 在Node.js环境下,使用Node.js的express框架初始化一个express项目,并按照上面的接口需求增加一个简单的接口,示例程序如下所示。
说明 为了避免跨域请求的问题,您可以在app.js文件中增加cors模块。
- 接口处理完成后,在Node.js环境下使用npm start命令测试接口,测试成功的截图如下所示。