接上文:IDEA中配置运行node.js

本文使用两个js开源库完成对shp文件的坐标系转换(支持GCJ-02,WGS84等大多数主流坐标系)

一、安装所需的npm包

1.读写shp文件的js库gdal

安装命令

npm install gdal -g --save

node-gdal库地址:https://github.com/naturalatlas/node-gdal
文档地址:http://naturalatlas.github.io/node-gdal/classes/gdal.html
使用参考文章:基于node-gdal的矢量数据编辑

2.修改shp文件数据坐标系的js库gcoord

安装命令

npm install gcoord -g

gcoord库地址:https://github.com/hujiulong/gcoord

二、转换代码

两个包安装完成后就可以开始写代码啦,完整的转换代码如下(注意这是在原文件上直接做修改,请事先将原文件做好备份):

//将shp文件的数据坐标系由GCJ-02改为WGS-84
const gcoord = require('gcoord');
const gdal = require("gdal");//r只读  r+读取修改增加  w创建, ESRI Shapefile即shp格式的全称
var dataset = gdal.open("C:\\Users\\syc\\Desktop\\DataFactory\\RoadData\\sz_main_road_GCJ-02_revised\\mainRoad.shp", "r+", "ESRI Shapefile");
//获取shp文件的第一个图层,我们的这个地图只有一个图层所以layers.get(0)即可
var layer = dataset.layers.get(0);
//获取图层的的数据记录数,看看有没有正确读取到
console.log("number of features: " + layer.features.count());
var i = 0;
var sum = 0;
//遍历数据对每一条记录的坐标数据进行坐标系转换
layer.features.forEach((feature) => {//转换前// console.log(feature.fid);// console.log(feature.getGeometry().toJSON());// console.log(feature.fields.toJSON());//转换为JSON对象,用gcoord进行geom数据的坐标系转换var geojson = JSON.parse(feature.getGeometry().toJSON());//第二个参数为原坐标系,第三个参数为目标坐标系,gcoord支持多种坐标系的相互转换,具体可参考其文档gcoord.transform(geojson, gcoord.GCJ02, gcoord.WGS84);//转换后// console.log(geojson);//将转换后的数据保存回featurefeature.setGeometry(gdal.Geometry.fromGeoJson(geojson));//将修改保存到shp文件中layer.features.set(feature.fid, feature);//对比发现保存后的数据点的经度的精度多出了一位,可能是保存浮点数过程中的一个小bug吧,不过没什么影响,尾数精度都十几位了// console.log(layer.features.get(feature.fid).getGeometry().toJSON());i++;sum++;if (i === 1000) {console.log("已完成数据转换" + sum + "条...............");i = 0;}
})//Flush pending changes to disk. 一定要调用这个方法,否则最后一条修改将不会生效
//目测features.set()方法里会调用这个方法,但是最后一条set就没人替它flush了,所以最后我们得手动调一下这个方法
layer.flush()
console.log("<-----------------转换完成,共转换完成"+ sum + "条数据------------------------>");//测试时也可用迭代器方法进行迭代,更多操作请参考node-gdal使用文档
// var feature = layer.features.next();

运行代码,shp文件的坐标系转换完成

node.js转换shp文件数据的坐标系相关推荐

  1. Node.js 将Json文件数据转为SQL可执行的insert语句

    要转换的json数据 [{"id": "1","name": "张三","height": &quo ...

  2. js node.js读取excel文件返回为json文本

    node-xlsx: 基于Node.js解析excel文件数据及生成excel文件:只支持xlsx xlsx: 基于Node.js解析excel文件数据及生成excel文件:只支持xlsx excel ...

  3. MongoDB+Node.js+express简单实现数据的提交与回显

    这是一个从前端到后台到数据库都是用js写的小demo,所以我们的口号是:将javascript进行到底 一.项目目录 从图片上也可以看出来,用了一个伪MVC的设计模式,简单来说controllers文 ...

  4. node.js调用.c文件_在Node.js中分派S3文件

    node.js调用.c文件 Some of our intranet backends use S3 storage and GraphQL APIs. It's a common scenario ...

  5. node.js生成Excel文件 使用node-xlsx

    node.js生成Excel文件 简介 尝试使用excel-export以及excel-export-next没有成功,转为使用node-xlsx成功生成Excel 从接到需求开始查询可用的库 好多博 ...

  6. 使用Node.JS监听文件夹变化

    使用Node.JS监听文件夹改变有许多应用场合,比如: 构建自动编绎工具 当源文件改变时,自动运行build过程,比如当你写CoffeeScript文件或SASS CSS文件时,保存之后可即时生成对应 ...

  7. 大文件分片上传前端框架_基于Node.js的大文件分片上传

    基于Node.js的大文件分片上传 我们在做文件上传的时候,如果文件过大,可能会导致请求超时的情况.所以,在遇到需要对大文件进行上传的时候,就需要对文件进行分片上传的操作.同时如果文件过大,在网络不佳 ...

  8. html表格中绑定显示xml文档内容的简单实例,JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)...

    本文实例讲述了JS读取XML文件数据并以table形式显示数据的方法.分享给大家供大家参考,具体如下: 先看xml文件: 张秋丽 女 18 李文才 男 31 李斯文 男 22 马英 女 25 孙红雷 ...

  9. 通过Node.js解析stl文件

    通过Node.js解析stl文件 在此之前请确认已安装Node.js,已配置环境变量.如未安装与配置,请查看Node.js安装及环境配置(Windows) 一.下载Node项目文件 Node项目文件下 ...

最新文章

  1. 业务需求、客户需求与功能需求
  2. 7.4.5 鲁棒主成分分析 PCA
  3. python:实例化configparser模块读写配置文件
  4. 题目1003:A+B
  5. 28 SD配置-主数据-信用管理-定义信贷组
  6. pytorch的4种边界Padding方法--ZeroPad2d、ConstantPad2d、ReflectionPad2d、ReplicationPad2d
  7. 怎么创建数据表的实体类和业务类_SSM搭建二手市场交易平台(二):数据表设计...
  8. hidden field implements session
  9. “干活的干不过写PPT 的”:新东方年会神曲刷屏背后:这3点值得我们思考
  10. u盘魔术师装linux,U盘魔术师安装步骤
  11. FME入门视频教程:第三节 FME界面及常用设置
  12. XTU-oj 字符矩阵
  13. HashSet源码解读
  14. vue 白边 项目_GitHub - Hobby0/Vue-mmPlayer: 基于 Vue 的在线音乐播放器(PC) Online music player...
  15. ubuntu双屏复制显示
  16. 计算机钥匙英语,计算机加锁--把U盘变成打开电脑的钥匙 - 信息科学 - 小木虫 - 学术 科研 互动社区...
  17. 打开电脑自带字符映射表
  18. 射频功率的快速测量法
  19. 优麒麟设置root登入
  20. 马云:不能把孩子放在温室里 光给孩子知识是不够的

热门文章

  1. 微信小程序傻瓜制作_零基础,傻瓜式制作微信小程序,3分钟完成不是问题!...
  2. Grasshopper脚本电池处理全站仪数据,生成建筑、线状地物和地形
  3. 解决Linux命令行前出现base
  4. 【配置】Pycharm远程连接服务器、配置SSH、配置py环境
  5. [RK3568 Android11] 开发之调试RK809 codec音频-MIC
  6. rounding mode
  7. R forcast auto arima用法
  8. java杨戬的角色_非人哉:游戏角色反映了神仙们的爱好,杨戬太让人意外了
  9. 计算机辅助绘图方式,计算机辅助绘图技巧
  10. 错误信息 Error executing DDL via JDBC Statement 解决办法