本文主要是基于geojson-merge,实现多个geojson文件合并为一个geojson文件,以便实现基于该文件进行数据分析展示
geojson合并概述
当前在 datav的geoatlas中,可以下载单个地市或区县的数据,例如福建省下面每个地市都可以单独下载一个geojson文件,现在需要将所有地市的geojson合并为一个福建省区县层级的geojson
geojson-merge
现在 npm安装 geojson-merge库:
npm i @mapbox/geojson-merge
支持两种方式进行合并
方式1-文件方式合并
该方式是每个geojson文件作为数组,传入到merge方法中进行合并,具体如下:
1var geojsonUtil = require("@mapbox/geojson-merge"); 2var fs = require("fs"); 3 4var fileDir = "./infiles/"; 5 6// 该方法是异步执行的 7fs.readdir(fileDir, { withFileTypes: true }, function (derr, files) { 8 if (derr) { 9 return console.error(derr); 10 } 11 var fileNames = []; 12 files.forEach(function (file) { 13 // 读取每个文件 14 if (file.isFile()) { 15 // 注意name只能获取到文件名称 16 fileNames.push(fileDir + file.name); 17 } 18 }); 19 // 此处返回的是JSONStream对象 20 var mergeStream = geojsonUtil.mergeFeatureCollectionStream(fileNames); 21 // 直接文件方式合并结果会导致一部分数据丢失 22 var outFileStream = fs.createWriteStream("./outfiles/文件方式合并结果.json"); 23 mergeStream.pipe(outFileStream); 24 // mergeStream.pipe(process.stdout); 25 console.log("json文件合并完毕"); 26});
注意:当前将福建省各个地市文件合并后,得到的结果会出现一部分数据丢失
方式2-内存数据合并
更推荐的一种方式是,将所有json文件读取到内存中,然后进行合并,具体如下:
1var geojsonUtil = require("@mapbox/geojson-merge"); 2var fs = require("fs"); 3 4var fileDir = "./infiles/";
语言
方法
8873
XeO35
9918
2011-08-24 04:31:40
1// 该方法是异步执行的 2fs.readdir(fileDir, { withFileTypes: true }, function (derr, files) { 3 if (derr) { 4 return console.error(derr); 5 } 6 var datas = []; 7 files.forEach(function (file) { 8 // 读取每个文件 9 if (file.isFile()) { 10 // 注意name只能获取到文件名称 11 // 注意同步读取的结果是string类型,需要转换为json对象 12 datas.push(JSON.parse(fs.readFileSync(fileDir + file.name, "utf8"))); 13 } 14 }); 15 // merge之后得到的是json对象,写入数据文件时需要通过stringify方法转换为string类型 16 var mergedJson = geojsonUtil.merge(datas); 17 fs.writeFile( 18 "./outfiles/内存方式合并结果.json", 19 JSON.stringify(mergedJson), 20 () => { 21 console.log("文件合并完成"); 22 } 23 ); 24});
输出的合并json文件,用tableau可视化展示效果如下(增加了随机指标值):

补充说明
vscode可以直接对node程序进行debug,一般是先采用默认配置进行debug,然后手工将配置信息修改如下:
1{ 2 // Use IntelliSense to learn about possible attributes. 3 // Hover to view descriptions of existing attributes. 4 // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 "version": "0.2.0", 6 "configurations": [ 7 { 8 "type": "node", 9 "request": "launch", 10 "name": "Launch Program", 11 "skipFiles": ["<node_internals>/**"], 12 "program": "${file}" 13 } 14 ] 15}