欢迎光临散文网 会员登陆 & 注册

GIS开发:geojson图层批量坐标转换

2022-06-23 08:53 作者:地理信息技术杂谈  | 我要投稿

在没有规律的坐标偏移情况下,如国内在线地图偏移和经纬度转换,可以进行方便进行单个坐标的转换,转换图层就需要自己进行开发了。
感谢coordtransform库的作者,这里使用了coordtransform进行偏移坐标的转换。

//引入fs和coordtransform库

const fs = require('fs');

const coordtransform = require('coordtransform');

//geojson矢量对象处理

function dataByfeaturetype(_feature) {

    this.datafeature = _feature;

    this.featuretype = _feature.geometry.type;

    this.coords = _feature.geometry.coordinates;

    this.newcoords = [];

}

//点、线、面中数据坐标遍历处理

dataByfeaturetype.prototype.handlePoint = function () {

    this.newcoords = coordtransform.wgs84togcj02(this.coords[0], this.coords[1]);

}

dataByfeaturetype.prototype.handleMultipointOrLinestring = function () {

    let _tempCoords = [];

    for (let _udx = 0; _udx < this.coords.length; _udx++) {

   //这个根据自己的需要,选择坐标的偏移处理函数

        _tempCoords.push(coordtransform.wgs84togcj02(this.coords[_udx][0], this.coords[_udx][1]));

    }

    this.newcoords = _tempCoords;

}

dataByfeaturetype.prototype.handleMultiLineStringOrPolygon = function () {

    let _tempCoords = [];

    for (let _udx = 0; _udx < this.coords.length; _udx++) {

        let _evCoords = [];

        for (let _ndx = 0; _ndx < this.coords[_udx].length; _ndx++) {

//这个根据自己的需要,选择坐标的偏移处理函数

            _evCoords.push(coordtransform.wgs84togcj02(this.coords[_udx][_ndx][0], this.coords[_udx][_ndx][1]));

        }

        _tempCoords.push(_evCoords);

    }

    this.newcoords = _tempCoords;

}

dataByfeaturetype.prototype.handleMultiPolygon = function () {

    let _tempCoords = [];

    for (let _udx = 0; _udx < this.coords.length; _udx++) {

        let _polygons = [];

        for (let _ndx = 0; _ndx < this.coords[_udx].length; _ndx++) {

            let _polygon = [];

            for (let _tdx = 0; _tdx < this.coords[_udx][_ndx].length; _tdx++) {

                _polygon.push(coordtransform.wgs84togcj02(this.coords[_udx][_ndx][_tdx][0], this.coords[_udx][_ndx][_tdx][1]));

            }

            _polygons.push(_polygon);

        }

        _tempCoords.push(_polygons);

    }

    this.newcoords = _tempCoords;

}

//根据图层的不同类型,选择处理方法

dataByfeaturetype.prototype.handleByType = function () {

    switch (this.featuretype) {

        case "Point":

            this.handlePoint();

            break;

        case "MultiPoint":

        case "LineString":

            this.handleMultipointOrLinestring();

            break;

        case "MultiLineString":

        case "Polygon":

            this.handleMultiLineStringOrPolygon();

            break;

        case "MultiPolygon":

            this.handleMultiPolygon();

            break;

    }

}

//获取数据处理结果

dataByfeaturetype.prototype.getResult = function () {

    this.datafeature.geometry.coordinates = this.newcoords;

    return this.datafeature;

};

//输入文件

fs.readFile('输入geojson文件', {

    encoding: 'utf-8'

}, (err, res) => {

    if (err) return;

    let _geojsondata = JSON.parse(res);

    let _newfeatures = [];

    let _features = _geojsondata.features;

    for (let _fdx = 0; _fdx < _features.length; _fdx++) {

        let _feature = _features[_fdx];

        let _featurehandle = new dataByfeaturetype(_feature);

        _featurehandle.handleByType();

        _newfeatures.push(_featurehandle.getResult());

    }

    _geojsondata.features = _newfeatures;

  //输出处理结果

    fs.writeFile("输出geojson", JSON.stringify(_geojsondata), (err) => {

        console.log(err);

    });

});

GIS开发:geojson图层批量坐标转换的评论 (共 条)

分享到微博请遵守国家法律