本文主要是基於geojson-merge,實現多個geojson文件合併爲一個geojson文件,以便實現基於該文件進行數據分析展現html
geojson合併概述
當前在 datav的geoatlas中,能夠下載單個地市或區縣的數據,例如福建省下面每一個地市均可以單獨下載一個geojson文件,如今須要將全部地市的geojson合併爲一個福建省區縣層級的geojsonnode
geojson-merge
如今 npm安裝 geojson-merge庫:npm
npm i @mapbox/geojson-merge
支持兩種方式進行合併json
方式1-文件方式合併
該方式是每一個geojson文件做爲數組,傳入到merge方法中進行合併,具體以下:數組
var geojsonUtil = require("@mapbox/geojson-merge"); var fs = require("fs"); var fileDir = "./infiles/"; // 該方法是異步執行的 fs.readdir(fileDir, { withFileTypes: true }, function (derr, files) { if (derr) { return console.error(derr); } var fileNames = []; files.forEach(function (file) { // 讀取每一個文件 if (file.isFile()) { // 注意name只能獲取到文件名稱 fileNames.push(fileDir + file.name); } }); // 此處返回的是JSONStream對象 var mergeStream = geojsonUtil.mergeFeatureCollectionStream(fileNames); // 直接文件方式合併結果會致使一部分數據丟失 var outFileStream = fs.createWriteStream("./outfiles/文件方式合併結果.json"); mergeStream.pipe(outFileStream); // mergeStream.pipe(process.stdout); console.log("json文件合併完畢"); });
注意:當前將福建省各個地市文件合併後,獲得的結果會出現一部分數據丟失app
方式2-內存數據合併
更推薦的一種方式是,將全部json文件讀取到內存中,而後進行合併,具體以下:異步
var geojsonUtil = require("@mapbox/geojson-merge"); var fs = require("fs"); var fileDir = "./infiles/";
語言 | 方法 |
---|---|
8873 | 抖音創業網 |
XeO35 | |
9918 | 2011-08-24 04:31:40 |
// 該方法是異步執行的 fs.readdir(fileDir, { withFileTypes: true }, function (derr, files) { if (derr) { return console.error(derr); } var datas = []; files.forEach(function (file) { // 讀取每一個文件 if (file.isFile()) { // 注意name只能獲取到文件名稱 // 注意同步讀取的結果是string類型,須要轉換爲json對象 datas.push(JSON.parse(fs.readFileSync(fileDir + file.name, "utf8"))); } }); // merge以後獲得的是json對象,寫入數據文件時須要經過stringify方法轉換爲string類型 var mergedJson = geojsonUtil.merge(datas); fs.writeFile( "./outfiles/內存方式合併結果.json", JSON.stringify(mergedJson), () => { console.log("文件合併完成"); } ); });
輸出的合併json文件,用tableau可視化展現效果以下(增長了隨機指標值):
ui
補充說明
vscode能夠直接對node程序進行debug,通常是先採用默認配置進行debug,而後手工將配置信息修改以下:spa
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "Launch Program", "skipFiles": ["<node_internals>/**"], "program": "${file}" } ] }