NodeJS-将GPX转换为Geojson返回空数组

查尔斯·杜波格

我有一个用户上传GPX文件然后转换为Geojson的表单,我使用mapbox / togeojson模块来实现它,并且我有以下代码:

const togeojson = require ('togeojson')
const jsdom = require('jsdom');
const { JSDOM } = jsdom;
const fs = require ('fs');
const DOMParser = require('xmldom').DOMParser;
const multer = require('multer');
const upload = multer({ dest: 'uploads/' })
module.exports = (express, Courses) => {

var courses_router = express.Router()

courses_router.route('/')
    .post(upload.single('gpxFile'),(req, res, next) => {
        let file = req.file
        if (file) {
            console.log("Uploaded : " + file.originalname + " to " + file.path)
            fs.readFile(file.path, (err, data) => {
                // let gpxJSDOM = new JSDOM(data)
                let gpx = new DOMParser().parseFromString(file.path, 'text/xml');
                let converted = togeojson.gpx(gpx)

            })
        }

        // var path = utils.ModifyString(req.body.title)
        // return false;
        // course_container.CreateCourses(Courses, req, res, path)
    })

当我记录的结果时converted,我得到:{ type: 'FeatureCollection', features: [] },它看起来像Geojson结构,但没有填充相应的数据(我已经在在线转换器上检查了我的GPX数据是否正确),我也尝试使用JSDOM,如本教程所示,但是没有结果,我猜代码上有一些数据处理错误,但是我不知道在哪里。

查尔斯·杜波格

找到了答案!我不需要读取文件,我只需要获取上载文件的路径,然后将其传递给new DOMParser()函数,最后在GeoJson中进行转换即可(而且完全不需要JSDOM)

const course_container = require('./../../containers/CourseContainer');
const utils = require('./../../../utils/functions')
const togeojson = require ('togeojson')
const fs = require ('fs');
const DOMParser = require('xmldom').DOMParser;
const multer = require('multer');
const path = require('path');
const upload = multer({ dest: 'uploads/' })
module.exports = (express, Courses) => {

    var courses_router = express.Router()

    courses_router.route('/')
        .post(upload.single('gpxFile'),(req, res, next) => {
            var file = req.file
            if (file) {
                var absolutePath = path.resolve(file.path);
                var gpx = new DOMParser().parseFromString(fs.readFileSync(absolutePath, 'utf8'));
                var geoJson = togeojson.gpx(gpx)
            }

            var course_path = utils.ModifyString(req.body.title)
            course_container.CreateCourses(Courses, req, res, course_path, geoJson)
        })

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章