处理数据

本文档为您介绍如何将CSV格式的文件处理成JSON格式的数据。

等值面组件需要的数据格式如下图所示。您需要对数据做进一步的加工处理,让其更符合DataV的数据规范。image

  • 裁剪边界数据:研究区域的边界数据。这里是一个GeoJSON格式的数据。

    GeoJSON是一种地理交换格式,如需了解更多关于GeoJSON的内容,请参见GeoJSON标准

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

说明

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

通过以下步骤处理数据。

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

    说明

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

    var csv = require("fast-csv");
    var fs = require('fs');
    var map = {};
    csv
    .fromPath("./站点列表(含经纬度)-新-1497个.csv", { headers: true, objectMode: true })
    .on("data", function (data) {
     map[data['code']] = data;
    })
    .on("end", function () {
     fs.writeFile('./站点列表经纬度映射.json', JSON.stringify(map));
     console.log("done");
    });

    得到监测站点编号为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"
     },
     ...
    }
  2. 处理2017120日的全国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
    .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");
    });

    将每天的时间段作为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 }, ...]
     ...
    }