GeoJson數據合併

本文主要是基於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}"
    }
  ]
}
相關文章
相關標籤/搜索