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读取RSS数据
Jan 20 Javascript
理解Javascript_07_理解instanceof实现原理
Oct 15 Javascript
js自动闭合html标签(自动补全html标记)
Oct 04 Javascript
js+HTML5基于过滤器从摄像头中捕获视频的方法
Jun 16 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
Jan 08 Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
Oct 16 Javascript
JS获得一个对象的所有属性和方法实例
Feb 21 Javascript
node中的session的具体使用
Sep 14 Javascript
JS左右无缝轮播功能完整实例
May 16 Javascript
jquery添加div实现消息聊天框
Feb 08 jQuery
基于react项目打包css引用路径错误解决方案
Oct 28 Javascript
微信小程序用户登录和登录态维护的实现
Dec 10 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
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
2012/02/05 PHP
很让人受教的 提高php代码质量36计
2012/09/05 PHP
php中使用array_filter()函数过滤空数组的实现代码
2014/08/19 PHP
php实现的验证码文件类实例
2015/06/18 PHP
如何实现浏览器上的右键菜单
2006/07/10 Javascript
Mootools 1.2教程 函数
2009/09/15 Javascript
新发现一个骗链接的方法(js读取cookies)
2012/01/11 Javascript
自己使用js/jquery写的一个定制对话框控件
2014/05/02 Javascript
node.js中的fs.lstatSync方法使用说明
2014/12/16 Javascript
动态生成的DOM不会触发onclick事件的原因及解决方法
2016/08/06 Javascript
JavaScript每天必学之数组和对象部分
2016/09/17 Javascript
JavaScript运动框架 链式运动到完美运动(五)
2017/05/18 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
vue监听用户输入和点击功能
2019/09/27 Javascript
Vue axios 将传递的json数据转为form data的例子
2019/10/29 Javascript
JQuery表单元素取值赋值方法总结
2020/05/12 jQuery
js+css实现全屏侧边栏
2020/06/16 Javascript
用Python进行一些简单的自然语言处理的教程
2015/03/31 Python
Python中使用dom模块生成XML文件示例
2015/04/05 Python
Ubuntu下安装PyV8
2016/03/13 Python
Python如何实现守护进程的方法示例
2017/02/08 Python
面向初学者的Python编辑器Mu
2018/10/08 Python
详解Python装饰器
2019/03/25 Python
itchat-python搭建微信机器人(附示例)
2019/06/11 Python
python函数的万能参数传参详解
2019/07/26 Python
Django中modelform组件实例用法总结
2020/02/10 Python
python实现跨excel sheet复制代码实例
2020/03/03 Python
Python库skimage绘制二值图像代码实例
2020/04/10 Python
英国第一家领先的在线处方眼镜零售商:Glasses Direct
2018/02/23 全球购物
自我评价的正确写法
2013/09/19 职场文书
鲜果饮品店创业计划书
2014/01/21 职场文书
初中生自我评价
2014/02/01 职场文书
大学英语演讲稿范文
2014/04/24 职场文书
优秀员工自荐书
2015/03/06 职场文书
golang中的空slice案例
2021/04/27 Golang
我国拿下天问一号火星着陆区附近 22 个地理实体命名:平乐、西柏坡、古田、漠河等
2022/04/29 数码科技