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 相关文章推荐
ASP中用Join和Array,可以加快字符连接速度的代码
Aug 22 Javascript
JQuery EasyUI 数字格式化处理示例
May 05 Javascript
node.js使用require()函数加载模块
Nov 26 Javascript
Jquery easyui 实现动态树
Nov 17 Javascript
Jquery使用小技巧汇总
Dec 29 Javascript
jquery mobile移动端幻灯片滑动切换效果
Apr 15 Javascript
微信通过页面(H5)直接打开本地app的解决方法
Sep 09 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
Mar 22 Javascript
利用Node.js批量抓取高清妹子图片实例教程
Aug 02 Javascript
web页面和微信小程序页面实现瀑布流效果
Sep 26 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
Feb 27 Javascript
vue 页面跳转的实现方式
Jan 12 Vue.js
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中$_SERVER使用说明
2015/07/05 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
2016/03/23 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
javascript instanceof,typeof的区别
2010/03/24 Javascript
jQuery获取Select选择的Text和Value(详细汇总)
2013/01/25 Javascript
javascript实现checkBox的全选,反选与赋值
2015/03/12 Javascript
JS表格组件神器bootstrap table详解(基础版)
2015/12/08 Javascript
Bootstrap Fileinput文件上传组件用法详解
2016/05/10 Javascript
js实现百度搜索提示框
2017/02/05 Javascript
js实现数字递增特效【仿支付宝我的财富】
2017/05/05 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
vue实现微信分享链接添加动态参数的方法
2019/04/29 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
原生js实现碰撞检测
2020/03/12 Javascript
RxJS在TypeScript中的简单使用详解
2020/04/13 Javascript
谈一谈vue请求数据放在created好还是mounted里好
2020/07/27 Javascript
详细解读Python中解析XML数据的方法
2015/10/15 Python
使用Python读取大文件的方法
2018/02/11 Python
《与孩子一起学编程》python自测题
2018/05/27 Python
Python实现App自动签到领取积分功能
2018/09/29 Python
python二维键值数组生成转json的例子
2019/12/06 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
2020/09/20 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
Python爬虫之Selenium鼠标事件的实现
2020/12/04 Python
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
会计专业自我鉴定范文
2013/10/06 职场文书
生产部主管岗位职责
2014/01/06 职场文书
小学国庆节活动方案
2014/02/11 职场文书
对标管理实施方案
2014/03/12 职场文书
公司合作协议书范本
2014/04/18 职场文书
安全生产标语
2014/06/06 职场文书
委托证明模板
2014/09/16 职场文书
大一学生个人总结
2015/02/15 职场文书
同学毕业留言寄语
2015/02/27 职场文书
干货!开幕词的写作方法
2019/04/02 职场文书
微软PC Health Check电脑健康状况检查应用下载(Win11配置检测工具)
2021/06/26 数码科技