麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

node將geojson轉(zhuǎn)shp返回給前端的實現(xiàn)方法

2019-11-19 11:26:17
字體:
供稿:網(wǎng)友

node將geojson轉(zhuǎn)shp需要調(diào)用[ogr2ogr][1]庫來實現(xiàn),在調(diào)用ogr2ogr庫時,因為其通過調(diào)用gdal的工具來實現(xiàn)將

geojson轉(zhuǎn)shp,所以需要安裝gdal并配置環(huán)境變量。

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

第一:你要確定你的.node 是好的,然后你可以繼續(xù)下一步了

第二:你的.node發(fā)現(xiàn)不了可能是因為缺少了依賴關(guān)系,簡單點(diǎn)說,就是缺少了.dll

第三:下載 Dependency Walker,這個軟件可以幫你確定一下缺少什么.dll,下載地址:http://www.dependencywalker.com/

第四:下載完Dependency Walker 直接打開.node 文件,將提示缺少的重要.dll 放在.node 同一級的目錄下,當(dāng)然你也可以不用下軟件,直接把重要的.dll放在.node目錄下就可以了。

第五:運(yùn)行,就不會報錯了。

環(huán)境配置完,可以進(jìn)行代碼實現(xiàn)了。

首先引入ogr2ogr庫

const ogr2ogr = require('ogr2ogr')

生成shp文件壓縮包

  // 聲明一個geojson變量也可以是geojson文件目錄  var geojson = {   type: 'FeatureCollection',   features: [    {     type: 'Feature',     geometry    }   ]  }  // shp保存目錄  const zipPath = './export/shpfile.zip'  // 創(chuàng)建文件寫入流  var file = fs.createWriteStream(zipPath)  // 調(diào)用ogr2ogr進(jìn)行轉(zhuǎn)化  var ogr = ogr2ogr(geojson).project('EPSG:4326')   .format('ESRI Shapefile')   .skipfailures()   .stream()  ogr.pipe(file)

然后將shp壓縮文件傳給前端,這里可以通過不同的方法進(jìn)行傳遞

(1) 通過sendFile直接進(jìn)行傳遞

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

(2)通過流的方式進(jìn)行傳遞

  var resPath = path.join(__dirname, '..', zipPath)  // 文件寫入完成觸發(fā)事件  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)   })  })

最后是前端發(fā)送請求接收的代碼

   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)   })

這里需要注意的地方是前端發(fā)送請求時需要設(shè)置一個參數(shù)responseType: 'blob',這里用到了Blob對象,這里是從服務(wù)器接收到的文件流創(chuàng)建blob對象并使用該blob 創(chuàng)建一個指向類型數(shù)組的URL,將該url作為a標(biāo)簽的鏈接目標(biāo),然后去觸發(fā)a標(biāo)簽的點(diǎn)擊事件從而文件下載。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 羞羞的视频在线观看 | 国产妇女乱码一区二区三区 | 成人资源在线观看 | 国产又白又嫩又紧又爽18p | 日韩黄色av网站 | chengrenzaixian| 91成人午夜性a一级毛片 | 色无极影院亚洲 | 免费观看视频网站 | 一级做a爱性色毛片免费1 | 国产一区亚洲 | 欧美黄色三级视频 | 极品国产91在线网站 | 午夜影视一区二区 | 国产精品免费观在线 | 国产精品视频自拍 | 国产精品视频一区二区三区综合 | 久久精品性视频 | 成人毛片100免费观看 | 色播视频在线播放 | 一级毛片免费大片 | 精品亚洲成a人在线观看 | 免费一区二区三区 | 久久久av亚洲男天堂 | 国产精品高潮99久久久久久久 | 欧美成人一二三区 | 在线男人天堂 | 亚洲成人免费网站 | 欧美成人免费看 | 最新福利在线 | 欧美乱论 | 毛片a区 | 国产欧美在线观看不卡一 | 九九热在线视频观看这里只有精品 | 一区二区视频在线看 | 一区二区三区无码高清视频 | 夜夜看 | 国产精品视频免费网站 | 91九色丨porny丨国产jk | 黄色免费高清网站 | 欧美福利视频一区二区三区 |