前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GeoJson数据合并

GeoJson数据合并

原创
作者头像
技术路漫漫
修改2020-06-22 10:18:15
3.3K0
修改2020-06-22 10:18:15
举报
文章被收录于专栏:技术路漫漫技术路漫漫

本文主要是基于geojson-merge,实现多个geojson文件合并为一个geojson文件,以便实现基于该文件进行数据分析展示

geojson合并概述

当前在 datav的geoatlas中,可以下载单个地市或区县的数据,例如福建省下面每个地市都可以单独下载一个geojson文件,现在需要将所有地市的geojson合并为一个福建省区县层级的geojson

geojson-merge

现在 npm安装 geojson-merge库:

代码语言:txt
复制
npm i @mapbox/geojson-merge

支持两种方式进行合并

方式1-文件方式合并

该方式是每个geojson文件作为数组,传入到merge方法中进行合并,具体如下:

代码语言:txt
复制
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文件读取到内存中,然后进行合并,具体如下:

代码语言:txt
复制
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,然后手工将配置信息修改如下:

代码语言:txt
复制
{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch Program",
      "skipFiles": ["<node_internals>/**"],
      "program": "${file}"
    }
  ]
}

参考资料

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • geojson合并概述
  • geojson-merge
    • 方式1-文件方式合并
      • 方式2-内存数据合并
        • 补充说明
        • 参考资料
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档