覆盖主要内容
版本: 6.1.0

处理数据

本文档为您介绍如何将CSV格式的文件处理成JSON格式的数据。 等值面组件需要的数据格式如下图所示。您需要对数据做进一步的加工处理,让其更符合 Uniplore数据大屏 的数据规范。

  • 裁剪面:研究区域的边界数据。这里是全国区域,是一个GeoJSON格式的数据。GeoJSON是一种地理交换格式,如需了解更多关于GeoJSON的内容,请参见GeoJSON标准

  • 插值点数据:示例数据是一个包含经度、纬度、值的数组,对应的需求为监测站点的经纬度和对应的某个指标的值。

信息

说明 如果仅做一天的某个时段的等值面图,例如2017年1月20日的中午12点关于空气质量指数(AQI)的指标图,那么您需要明确当天这个时段,每个监测站点的位置(经纬度信息)和对应的AQI值。

通过以下步骤处理数据。

  1. 使用以下的Node.js脚本处理全国监测站点的CSV格式文件。
信息

说明 获取全国监测站点的CSV格式文件,请参见获取数据

var csv = require("fast-csv"); // Tested on fast-csv@4.3.1
var fs = require('fs');
var map = {};
csv
.parseFile("./站点列表-2016.11.07起.csv", { headers: true, objectMode: true })
.on("data", function (data) {
map[data['code']] = data;
})
.on("end", function () {
fs.writeFile('./站点列表经纬度映射.json', JSON.stringify(map), (err) => {
if (err) throw err;
console.log('文件已被保存');
});
});

得到监测站点编号为key,站点信息为value的字典。

{
"1001A": {
"code": "1001A",
"name": "万寿西宫",
"city": "北京",
"lng": "116.366",
"lat": "39.8673"
},
"1002A": {
"code": "1002A",
"name": "定陵",
"city": "北京",
"lng": "116.17",
"lat": "40.2865"
},
"1003A": {
"code": "1003A",
"name": "东四",
"city": "北京",
"lng": "116.434",
"lat": "39.9522"
},
...
}
  1. 处理2017年1月20日的全国1497个监测点数据。

    使用如下脚本,处理当天24小时每个监测站点各个空气质量指标的信息。将这些信息提取出来,并根据前面获取的站点列表经纬度映射表,给站点加上经纬度信息。

var fs = require('fs');
var csv = require("fast-csv");
var mapdata = require('./站点列表经纬度映射.json');
var file = './站点_20170101-20170202/china_sites_20170120.csv';
var filename = file.replace(/^.*[\\\/]/, '').split('.')[0].split('_')[2];
var datas = {};
csv
.parseFile(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), (err) => {
if (err) throw err;
console.log('文件已被保存');
});
});

将每天的时间段作为key,每个时间段所对应的所有监测站点的AQI和位置等信息的数组,作为对应的value值。这样就可以方便地获取当天每个时间段的数据,并应用到等值面组件中。

{
"0": [{ "name": "万寿西宫", "value": 18, "code": "1001A", "city": "北京", "lng": 116.366, "lat": 39.8673 }, { "name": "定陵", "value": 25, "code": "1002A", "city": "北京", "lng": 116.17, "lat": 40.2865 }, ...],
"1": [{ "name": "万寿西宫", "value": 28, "code": "1001A", "city": "北京", "lng": 116.366, "lat": 39.8673 }, { "name": "定陵", "value": 65, "code": "1002A", "city": "北京", "lng": 116.17, "lat": 40.2865 }, ...],
"2": [{ "name": "万寿西宫", "value": 88, "code": "1001A", "city": "北京", "lng": 116.366, "lat": 39.8673 }, { "name": "定陵", "value": 95, "code": "1002A", "city": "北京", "lng": 116.17, "lat": 40.2865 }, ...]
...
}

.