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 相关文章推荐
jQuery实现鼠标悬停显示提示信息窗口的方法
Apr 30 Javascript
JQuery实现图片轮播效果
Sep 15 Javascript
解析jQueryEasyUI的使用
Nov 22 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
Dec 28 Javascript
老生常谈jquery中detach()和remove()的区别
Mar 02 Javascript
vue2.0中click点击当前li实现动态切换class
Jun 21 Javascript
Easyui ueditor 整合解决不能编辑的问题(推荐)
Jun 25 Javascript
浅谈AngularJs 双向绑定原理(数据绑定机制)
Dec 07 Javascript
nginx+vue.js实现前后端分离的示例代码
Feb 12 Javascript
Vue 页面跳转不用router-link的实现代码
Apr 12 Javascript
ES6知识点整理之数组解构和字符串解构的应用示例
Apr 17 Javascript
node中使用shell脚本的方法步骤
Mar 23 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
《逃离塔科夫》——“萌新劝退,老手自嗨”的硬核FPS游戏
2020/04/03 其他游戏
php学习之流程控制实现代码
2011/06/09 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
基于php下载文件的详解
2013/06/02 PHP
Thinkphp使用mongodb数据库实现多条件查询方法
2014/06/26 PHP
Codeigniter框架实现获取分页数据和总条数的方法
2014/12/05 PHP
php操作access数据库的方法详解
2017/02/22 PHP
jquery插件 autoComboBox 下拉框
2010/12/22 Javascript
jquery创建表格(自动增加表格)代码分享
2013/12/25 Javascript
js图片模糊切换显示特效的方法
2015/02/17 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
2015/05/26 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
2016/08/29 Javascript
js实现适合新闻类图片的轮播效果
2017/02/05 Javascript
vue中添加mp3音频文件的方法
2018/03/02 Javascript
JavaScript获取移动设备型号的实现代码(JS获取手机型号和系统)
2018/03/10 Javascript
JS获取当前时间的年月日时分秒及时间的格式化的方法
2019/12/18 Javascript
小程序如何写动态标签的实现方法
2020/02/05 Javascript
js获取url页面id,也就是最后的数字文件名
2020/09/25 Javascript
js定时器出现第一次延迟的原因及解决方法
2021/01/04 Javascript
python自动安装pip
2014/04/24 Python
python输出指定月份日历的方法
2015/04/23 Python
如何利用python查找电脑文件
2018/04/27 Python
python字符串替换re.sub()方法解析
2019/09/18 Python
python 获取当前目录下的文件目录和文件名实例代码详解
2020/03/10 Python
python实现单张图像拼接与批量图片拼接
2020/03/23 Python
Keras load_model 导入错误的解决方式
2020/06/09 Python
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
澳大利亚Rockwear官网:女子瑜伽、健身和运动服
2021/01/26 全球购物
.NET面试题:什么是值类型和引用类型
2016/01/12 面试题
如何手工释放资源
2013/12/15 面试题
英语专业毕业个人求职自荐信
2013/09/21 职场文书
境外导游求职信
2014/02/27 职场文书
医院护士见习期自我鉴定
2014/09/15 职场文书
蔬果开业典礼发言稿应该怎么写?
2019/09/03 职场文书
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python
MySQ InnoDB和MyISAM存储引擎介绍
2022/04/26 MySQL