二维矢量数据转火星坐标

本文基于Supermap平台实现二维矢量数据的84转火星。

步骤:

  1. 在iDesktop中把数据转换成wgs84的地理坐标系
  2. 在iDesktop中,把数据转成geojson。
    注意格式要选择utf-8,不然中文字段会乱码。
  3. 在nodejs下,使用projzh包把wgs84坐标转成火星坐标。
    //index.js文件

    var projzh = require('projzh');
    const fs = require('fs');
    function ll2gcj(input) {
        return projzh.datum.gcj02.fromWGS84(input);
    }

    var forder0 = './before';
    if (!fs.existsSync(forder0)) {
        console.log('..............error:before文件夹不存在................');
        return;
    }
    const files = fs.readdirSync(forder0)
    files.forEach(function (item, index) {
        var testpath = forder0 + '/' + item;
        
        var res = JSON.parse(fs.readFileSync(testpath).toString());
        if(res){
            for(var i = 0;i<res.features.length;i++){
                let feature = res.features[i];
                if(feature.geometry.type === 'Polygon'){
                    for(var j=0;j<feature.geometry.coordinates.length;j++){
                        for(var k=0;k<feature.geometry.coordinates[j].length;k++){
                            let lng = feature.geometry.coordinates[j][k][0];
                            let lat = feature.geometry.coordinates[j][k][1];
                            var obj = ll2gcj([lng,lat]);
                            feature.geometry.coordinates[j][k][0] = obj[0];
                            feature.geometry.coordinates[j][k][1] = obj[1];
                            // process.stdout.write('\033[0f');
                            // console.log('i:'+i+';j:'+j+";k:"+k);
                        }
                    }
                }else if(feature.geometry.type === 'MultiPolygon'){
                    for(var j=0;j<feature.geometry.coordinates.length;j++){
                        for(var k=0;k<feature.geometry.coordinates[j].length;k++){
                            for(var m=0;m<feature.geometry.coordinates[j][k].length;m++){
                                let lng = feature.geometry.coordinates[j][k][m][0];
                                let lat = feature.geometry.coordinates[j][k][m][1];
                                var obj = ll2gcj([lng,lat]);
                                feature.geometry.coordinates[j][k][m][0] = obj[0];
                                feature.geometry.coordinates[j][k][m][1] = obj[1];
                                // process.stdout.write('\033[0f');
                                // console.log('i:'+i+';j:'+j+";k:"+k+';m:'+m);
                            }
                        }
                    }
                }else if(feature.geometry.type === 'LineString'){
                    for(var j=0;j<feature.geometry.coordinates.length;j++){
                        let lng = feature.geometry.coordinates[j][0];
                        let lat = feature.geometry.coordinates[j][1];
                        var obj = ll2gcj([lng,lat]);
                        feature.geometry.coordinates[j][0] = obj[0];
                        feature.geometry.coordinates[j][1] = obj[1];
                        // process.stdout.write('\033[0f');
                        // console.log('i:'+i+';j:'+j);
                    }
                }else if(feature.geometry.type === 'Point'){
                    let lng = feature.geometry.coordinates[0];
                    let lat = feature.geometry.coordinates[1];
                    var obj = ll2gcj([lng,lat]);
                    feature.geometry.coordinates[0] = obj[0];
                    feature.geometry.coordinates[1] = obj[1];
                    // process.stdout.write('\033[0f');
                    // console.log('i:'+i);
                }
            }
            var forder = './after';
            if (!fs.existsSync(forder)) {
                fs.mkdirSync(forder);
            }
            var testpath2 = forder + '/' + item;
            fs.writeFileSync(testpath2, JSON.stringify(res));
        }
        console.log(item+' finished');
        console.log('......end......');
    })
    先装nodejs环境,在geojson文件所在文件夹下运行node index.js。(before文件夹中放源文件,after文件夹中放转换后的文件,目前支持Polygon、MultiPolygon、LineString、Point)
  4. 在iDesktop中,导入geojson格式的火星地理坐标数据。
  5. 在iDesktop中,把数据转成自己想要的格式,如3857之类的。
posted @ 2020-04-15 15:09  梦想mc  阅读(546)  评论(0编辑  收藏  举报