本文档为您介绍如何将CSV格式的文件处理成JSON格式的数据。
等值面组件需要的数据格式如下图所示。您需要对数据做进一步的加工处理,让其更符合DataV的数据规范。
- 裁剪面:研究区域的边界数据。这里是全国区域,是一个GeoJSON格式的数据。
GeoJSON是一种地理交换格式,如需了解更多关于GeoJSON的内容,请参见GeoJSON标准。
- 插值点数据:示例数据是一个包含经度、纬度、值的数组,对应的需求为监测站点的经纬度和对应的某个指标的值。
说明 如果仅做一天的某个时段的等值面图,例如2017年1月20日的中午12点关于空气质量指数(AQI)的指标图,那么您需要明确当天这个时段,每个监测站点的位置(经纬度信息)和对应的AQI值。
通过以下步骤处理数据。
- 使用以下的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" }, ... }
- 处理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 .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 }, ...] ... }