node将geojson转shp返回给前端的实现方法


Posted in Javascript onMay 29, 2019

node将geojson转shp需要调用[ogr2ogr][1]库来实现,在调用ogr2ogr库时,因为其通过调用gdal的工具来实现将

geojson转shp,所以需要安装gdal并配置环境变量。

参考文章:https://stackoverflow.com/questions/41253450/error-the-specified-module-could-not-be-found

第一:你要确定你的.node 是好的,然后你可以继续下一步了

第二:你的.node发现不了可能是因为缺少了依赖关系,简单点说,就是缺少了.dll

第三:下载 Dependency Walker,这个软件可以帮你确定一下缺少什么.dll,下载地址:http://www.dependencywalker.com/

第四:下载完Dependency Walker 直接打开.node 文件,将提示缺少的重要.dll 放在.node 同一级的目录下,当然你也可以不用下软件,直接把重要的.dll放在.node目录下就可以了。

第五:运行,就不会报错了。

环境配置完,可以进行代码实现了。

首先引入ogr2ogr库

const ogr2ogr = require('ogr2ogr')

生成shp文件压缩包

// 声明一个geojson变量也可以是geojson文件目录
  var geojson = {
   type: 'FeatureCollection',
   features: [
    {
     type: 'Feature',
     geometry
    }
   ]
  }
  // shp保存目录
  const zipPath = './export/shpfile.zip'
  // 创建文件写入流
  var file = fs.createWriteStream(zipPath)
  // 调用ogr2ogr进行转化
  var ogr = ogr2ogr(geojson).project('EPSG:4326')
   .format('ESRI Shapefile')
   .skipfailures()
   .stream()
  ogr.pipe(file)

然后将shp压缩文件传给前端,这里可以通过不同的方法进行传递

(1) 通过sendFile直接进行传递

var resPath = path.join(__dirname, '..', zipPath)
res.sendFile(resPath)

(2)通过流的方式进行传递

var resPath = path.join(__dirname, '..', zipPath)
  // 文件写入完成触发事件
  file.on('finish', function() {
   res.set({
    'Content-Type': 'application/zip',
    'Content-Disposition':
     'attachment; filename=' + encodeURI(name) + '.zip',
    'Content-Length': fs.statSync(zipPath).size
   })
   let fReadStream = fs.createReadStream(zipPath)
   fReadStream.pipe(res)
   fReadStream.on('end', function() {
    fs.unlinkSync(resPath)
   })
   fReadStream.on('error', function(err) {
    console.log(err)
   })
  })

最后是前端发送请求接收的代码

axios.post('http://localhost:3000/jsontoshp', {
    responseType: 'blob'
   }).then(res => {
    const blobUrl = URL.createObjectURL(res.data)
    const a = document.createElement('a')
    a.style.display = 'none'
    a.download = '文件名称'
    a.href = blobUrl
    a.click()
    URL.revokeObjectURL(blobUrl)
   })

这里需要注意的地方是前端发送请求时需要设置一个参数responseType: 'blob',这里用到了Blob对象,这里是从服务器接收到的文件流创建blob对象并使用该blob 创建一个指向类型数组的URL,将该url作为a标签的链接目标,然后去触发a标签的点击事件从而文件下载。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 显示当前系统时间代码
Dec 28 Javascript
JS下拉框内容左右移动效果的具体实现
Jul 10 Javascript
JavaScript 作用域链解析
Nov 13 Javascript
js实现文字在按钮上滚动的方法
Aug 20 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
Aug 24 Javascript
seajs学习教程之基础篇
Oct 20 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
Dec 05 Javascript
js实现一个猜数字游戏
Mar 31 Javascript
Js判断H5上下滑动方向及滑动到顶部和底部判断的示例代码
Nov 15 Javascript
bootstrap3中container与container_fluid外层容器的区别讲解
Dec 04 Javascript
Vue插槽原理与用法详解
Mar 05 Javascript
对layer弹出框中icon数字参数的说明介绍
Sep 04 Javascript
node学习笔记之读写文件与开启第一个web服务器操作示例
May 29 #Javascript
关于element-ui的隐藏组件el-scrollbar的使用
May 29 #Javascript
JS学习笔记之数组去重实现方法小结
May 29 #Javascript
基于Vue实现电商SKU组合算法问题
May 29 #Javascript
JS学习笔记之闭包小案例分析
May 29 #Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
May 29 #Javascript
elementUI select组件value值注意事项详解
May 29 #Javascript
You might like
终于听上了直流胆调频
2021/03/02 无线电
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
php查找字符串中第一个非0的位置截取
2017/02/27 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
2017/06/09 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
PHP ADODB生成下拉列表框功能示例
2018/05/29 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
php+js实现裁剪任意形状图片
2018/10/31 PHP
phpfpm的作用和用法
2019/10/10 PHP
laravel 解决Validator使用中出现的问题
2019/10/25 PHP
弹出广告特效代码(一个IP只弹出一次)
2007/05/11 Javascript
JavaScript 不只是脚本
2007/05/30 Javascript
IE8 中使用加速器(Activities)
2010/05/14 Javascript
js鼠标滑过弹出层的定位IE6bug解决办法
2012/12/26 Javascript
javascript跟随滚动效果插件代码(javascript Follow Plugin)
2013/08/03 Javascript
今天是星期几的4种JS代码写法
2013/09/17 Javascript
微信小程序实现图片自适应(支持多图)
2017/01/25 Javascript
微信小程序 仿猫眼实现实例代码
2017/03/14 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
详解JavaScript的BUG和错误
2018/05/07 Javascript
JavaScript中发出HTTP请求最常用的方法
2018/07/12 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
如何基于js判断浏览器版本
2020/02/20 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
Python 内存管理机制全面分析
2021/01/16 Python
英国最红的高街时尚品牌:Topshop
2016/08/05 全球购物
捷克街头、运动和滑板一站式商店:BoardStar.cz
2019/10/06 全球购物
戴森西班牙官网:Dyson西班牙
2020/02/04 全球购物
英国手工制作的现代与经典的沙发和床:Love Your Home
2020/09/26 全球购物
外语系大学生自荐信范文
2014/03/01 职场文书
党的群众路线对照检查材料思想汇报(学校)
2014/10/04 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
狼牙山五壮士观后感
2015/06/09 职场文书
大学生村官工作心得体会
2016/01/23 职场文书
java项目构建Gradle的使用教程
2022/03/24 Java/Android
win11无法添加打印机怎么办? 提示windows无法打开添加打印机的解决办法
2022/04/05 数码科技