本文基於Supermap平臺實現二維矢量數據的84轉火星。 步驟: 在iDesktop中把數據轉換成wgs84的地理坐標系 在iDesktop中,把數據轉成geojson。 註意格式要選擇utf-8,不然中文欄位會亂碼。 在nodejs下,使用projzh包把wgs84坐標轉成火星坐標。 //ind ...
本文基於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之類的。