nodeがgeojsonをshpに変えて先端に戻す実現方法
nodeがgeojsonをshpに切り替えるには[ogr 2 ogr][1]ライブラリを呼び出す必要があります。Gr 2 ogrライブラリを呼び出すとき、gdalのツールを呼び出すことによって実現されます。
geojsonからshpに移行するため、gdalをインストールして環境変数を配置する必要があります。
参考文献:https://stackoverflow.com/questions/41253450/error-the-specified-module-could-not-be-found
第一:あなたはあなたのを確定します。nodeはいいです。そして次のステップを続けてもいいです。
第二に、あなたのノドが発見できないのは、依存関係が欠けているからかもしれません。
第三:Dependency Walkerをダウンロードして、このソフトウェアは何が足りないか確認してくれます。dll、ダウンロード住所:http://www.dependencywalker.com/
第四:Dependency Walkerをダウンロードしました。nodeファイルは、欠けている重要性をヒントにします。nodeの同じクラスのディレクトリの下に置いてください。もちろん、あなたもソフトウェアをダウンロードしなくてもいいです。直接に重要なdllを置いてください。nodeディレクトリの下に置いてもいいです。
第5:運行して、間違いを申し込むことはできませんでした。
環境の配置が終わったら、コードが実現できます。
まず、ogr 2 ogrライブラリを導入します。
(1)sendFileによる直接転送
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
geojsonからshpに移行するため、gdalをインストールして環境変数を配置する必要があります。
参考文献:https://stackoverflow.com/questions/41253450/error-the-specified-module-could-not-be-found
第一:あなたはあなたのを確定します。nodeはいいです。そして次のステップを続けてもいいです。
第二に、あなたのノドが発見できないのは、依存関係が欠けているからかもしれません。
第三:Dependency Walkerをダウンロードして、このソフトウェアは何が足りないか確認してくれます。dll、ダウンロード住所:http://www.dependencywalker.com/
第四:Dependency Walkerをダウンロードしました。nodeファイルは、欠けている重要性をヒントにします。nodeの同じクラスのディレクトリの下に置いてください。もちろん、あなたもソフトウェアをダウンロードしなくてもいいです。直接に重要なdllを置いてください。nodeディレクトリの下に置いてもいいです。
第5:運行して、間違いを申し込むことはできませんでした。
環境の配置が終わったら、コードが実現できます。
まず、ogr 2 ogrライブラリを導入します。
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)
})
ここで注意すべき点は、フロントエンド送信要求時にパラメータreponseTypeを設定する必要があります。ここでは、Blobオブジェクトを使用して、サーバから受信したファイルフローからblobオブジェクトを作成し、このblobを使用して指向型配列のURLを作成し、このurlをaタグのリンク先として、aタグのクリックイベントをトリガしてファイルをダウンロードします。以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。