GeoJson数据合并

本文主要是基于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}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang