zoukankan      html  css  js  c++  java
  • 二维矢量数据转火星坐标

    本文基于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('33[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('33[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('33[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('33[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之类的。
  • 相关阅读:
    DAY1 linux 50条命令
    安卓2.0,3.0,4.0的差别
    java历史
    晶体管共射极单管放大电路
    jquery取消选择select下拉框
    oarcle数据库导入导出,创建表空间
    360chrome,google chrome浏览器使用jquery.ajax加载本地html文件
    jquery 选择器
    nodejs 相关
    关于http请求
  • 原文地址:https://www.cnblogs.com/webgis-mc/p/12705464.html
Copyright © 2011-2022 走看看