资讯专栏INFORMATION COLUMN

node将geojson转shp返回给前端

ACb0y / 3121人阅读

摘要:将转需要调用库来实现,在调用库时,因为其通过调用的工具来实现将转,所以需要安装并配置环境变量,详情可参考此链接。环境配置完,可以进行代码实现了。

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

geojson转shp,所以需要安装gdal并配置环境变量,详情可参考此链接。环境配置完,可以进行代码实现了。

首先引入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标签的点击事件从而文件下载。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/109931.html

相关文章

  • 【echarts地图制作】下钻到乡镇/街道级别的

    摘要:需求展示西安市各区县的地图,点击各区县下钻到各乡镇街道,只能内网环境使用,不可用通过百度高德地图来实现。利用展示自定义的地图关于具体如何导入格式数据到的方法,可以参考官方示例。 需求 展示西安市各区县的地图,点击各区县下钻到各乡镇/街道,只能内网环境使用,不可用通过百度/高德地图来实现。 解决 利用地图数据生成区域的geojson 网络上大部分地图数据只是到省市,最多到区县,再往下的数...

    宠来也 评论0 收藏0
  • 自制Echarts地图数据 mapshaper-plus

    摘要:背景在做图表统计时,需要自制地图数据,但官方没有提供一个平台可以直接将文件转化为压缩后的或格式的地图文件,而导出的数据没有压缩,数据量过大。 mapshaper-plus 基于mapshaper对geojson地图数据的坐标信息进行压缩编码,并提供可直接生成压缩编码后的echarts map数据格式 Demo http://blog.giscafer.com/maps... Desc...

    FrozenMap 评论0 收藏0
  • echarts结合高德API进行地图下钻

    摘要:广告开始最近做了表格数据转成图表展示的一个组件,地址如下整合地图的时候发现针对地级市的一些文件太多了,全部引入后有将近,所以就用了下高德老爷给的组件和接口,然后弄完在这记录一下虽然这种例子在社区里有很多这个组件文件放在了中,样式奇丑,请原谅 /——————广告开始——————/ 最近做了表格数据转成图表展示的一个react组件,地址如下: https://github.com/Lyla...

    happen 评论0 收藏0
  • 阅读 Linux 内核源码——共享内存

    摘要:在中共享内存属于子系统。通常这种共享内存的方式是用于有父子关系的进程的。接下来我们看一下共享内存相关函数。然后调用函数给共享内存数据结构分配空间。注意此操作并不会销毁共享内存,即使没有进程连接到它也不会,只有手动调用才能销毁。 介绍 我看的是linux-4.2.3的源码。参考了《边干边学——Linux内核指导》(鬼畜的书名)第16章内容,他们用的是2.6.15的内核源码。 现在linu...

    Dr_Noooo 评论0 收藏0
  • 阅读 Linux 内核源码——共享内存

    摘要:在中共享内存属于子系统。通常这种共享内存的方式是用于有父子关系的进程的。接下来我们看一下共享内存相关函数。然后调用函数给共享内存数据结构分配空间。注意此操作并不会销毁共享内存,即使没有进程连接到它也不会,只有手动调用才能销毁。 介绍 我看的是linux-4.2.3的源码。参考了《边干边学——Linux内核指导》(鬼畜的书名)第16章内容,他们用的是2.6.15的内核源码。 现在linu...

    mrcode 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<