GeoJson数据合并
生活随笔
收集整理的這篇文章主要介紹了
GeoJson数据合并
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文主要是基于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数据合并的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Elasticsearch+filebe
- 下一篇: PRML(3)--Chapter2(上)