本文主要是基于geojson-merge,实现多个geojson文件合并为一个geojson文件,以便实现基于该文件进行数据分析展示
geojson合并概述
当前在 datav的geoatlas中,可以下载单个地市或区县的数据,例如福建省下面每个地市都可以单独下载一个geojson文件,现在需要将所有地市的geojson合并为一个福建省区县层级的geojson
geojson-merge
现在 npm安装 geojson-merge库:
npm i @mapbox/geojson-merge
支持两种方式进行合并
方式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文件合并完毕");});
注意:当前将福建省各个地市文件合并后,得到的结果会出现一部分数据丢失
方式2-内存数据合并
更推荐的一种方式是,将所有json文件读取到内存中,然后进行合并,具体如下:
var geojsonUtil = require("@mapbox/geojson-merge");var fs = require("fs");var fileDir = "./infiles/"; 语言 方法
8873
抖音创业网XeO35
梨涡app有风险吗「知识普及」官方说明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可视化展示效果如下(增加了随机指标值):
补充说明
vscode可以直接对node程序进行debug,一般是先采用默认配置进行debug,然后手工将配置信息修改如下:
{ // 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}" } ]}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。