二维矢量数据转火星坐标
本文基于Supermap平台实现二维矢量数据的84转火星。
步骤:
- 在iDesktop中把数据转换成wgs84的地理坐标系
- 在iDesktop中,把数据转成geojson。
注意格式要选择utf-8,不然中文字段会乱码。
- 在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)
- 在iDesktop中,导入geojson格式的火星地理坐标数据。
- 在iDesktop中,把数据转成自己想要的格式,如3857之类的。