本文主要是基于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/";// 该方法是异步执行的
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}"}]
}

参考资料

  • https://www.npmjs.com/package/@mapbox/geojson-merge
  • https://datav.aliyun.com/tools/atlas/

GeoJson数据合并相关推荐

  1. echarts地图学习(使用geoJson数据绘制地图)

    参考文档 使用echarts完成中国省市区县镇地图展示 echarts地图(中国地图展示各省数据) echarts实现中国地图区域分布图 vue + echarts 利用echarts中的map地图中 ...

  2. 省、市、区、街道行政区数据以及行政区数据合并问题

    最近在开发的过程中,遇到了一个问题,如何将多段Polygon合并成一个,在网上找了好久,试了一堆方法,这里转载我找到的一个实际用起来最有用的方法 以下内容转载于:https://www.cnblogs ...

  3. python用merge匹配和左连接_左手用R右手Python系列——数据合并与追加

    感谢关注天善智能,走好数据之路↑↑↑ 欢迎关注天善智能,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习,问答.求职一站式搞定! 本文作者:天善智能社区专家杜雨 今天这篇跟大家介绍R语言 ...

  4. bind merge r 和join_R语言中的数据合并函数(merge,cbind和rbind)的使用

    R语言中的数据合并函数(merge,cbind和rbind)的使用-R语言中用cbind() 和rbind() 构建分块矩阵 1.merge函数 两个数据框拥有相同的时间或观测值,但这些列却不尽相同. ...

  5. mongodb数据合并设计_MongoDB:如何将来自多个集合的数据合并成一个.?

    虽然不能实时执行此操作,但可以使用MongoDB1.8+map/Reduce中的"Reduction"Out选项多次运行map-Reduce将数据合并到一起(请参见http:/ww ...

  6. Sql server中如何将表A和表B的数据合并(乘积方式)

    sql server中如何将表A 和表B的数据合并成乘积方式,也就是说表A有2条数据,表B有3条数据,乘积后有6条数据, 这就要用到sql中的笛卡尔积方式了 1.什么是笛卡尔积 笛卡尔积在SQL中的实 ...

  7. PANDAS 数据合并与重塑(concat篇) 原创 2016年09月13日 19:26:30 47784 pandas作者Wes McKinney 在【PYTHON FOR DATA ANALYS

    PANDAS 数据合并与重塑(concat篇) 原创 2016年09月13日 19:26:30 标签: 47784 编辑 删除 pandas作者Wes McKinney 在[PYTHON FOR DA ...

  8. 多帧点云数据拼接合并_多工作簿数据合并,还在手动复制粘贴就out了,用批处理一键搞定...

    相信许多朋友都有碰到过将多个工作簿文件数据合并到一张表的情况,这种情况下许多朋友想尽各种办法,复制粘贴也好.vba多表合并也罢,但是合并数据总感觉需要耗费很多时间. 如上图所示,我们需要将1-8月8个 ...

  9. 【Python】图解Pandas数据合并:concat、join、append

    公众号:尤而小屋 作者:Peter 编辑:Peter 图解pandas数据合并:concat+join+append 在上一篇文章中介绍过pandas中最为常用的一个合并函数merge的使用,本文中介 ...

最新文章

  1. Hierarchy视图里的Transform和Camera组件
  2. -Linux基础知识2 -文件系统的操作 压缩,解压缩
  3. 分治最小割 学习总结
  4. 一位互联网老兵分享,社会化运营案例解析(宜信内部干货)
  5. python基础教程:list转换range()的打印结果
  6. gps数据存储mysql_gps数据存储mysql
  7. git上传大于100M的文件
  8. linux如何得到本机地址,Linux下如何得到本机所有IP地址及MAC地址
  9. 【Python】Numpy中伪随机数的简单使用
  10. stream流常用方法_Java8 中用法优雅的 Stream,怪不得我之前总是看不懂别人写的代码!...
  11. 37 个 Python Web 开发框架总结
  12. 【Base64是什么?】
  13. 【导弹四种坐标系及坐标系之间的变换】
  14. 如何减少PDF文件的大小,为pdf瘦身?
  15. python蒙特卡洛算法模拟赌博模型
  16. 旋转矩阵、欧拉角、旋转矢量及四元数的介绍和工程应用
  17. 互动媒体作业一——动态图形临摹
  18. 计算机组成与设计project1,计算机组成与体系结构(性能设计)答案完整版-第八版...
  19. iphone通讯录 android,3个方法,教你如何快速而又有效的将联系人从iPhone转移到安卓...
  20. windows下tomcat集群配置(两种方法)

热门文章

  1. 微信小程序项目实例——食堂吃哪个
  2. FFmpeg:截取视频片段转成GIF动画
  3. Luogu 月赛 P5238 整数校验器
  4. Saruman's Army
  5. 禅卡塔罗:一个真正厉害的塔罗师是什么样的?
  6. 定位导航——旋转矩阵,IMU,左右乘
  7. 论文精读 ——《BEVDepth: Acquisition of Reliable Depth for Multi-view 3D Object Detection》
  8. 树莓派打造无线扫描仪.
  9. matplotlib.pyplot 库(二)
  10. 深信服上网行为管理开启snmp_深信服上网行为管理部署方式及功能实现配置说明资料...