node-gdal实践-读写shp数据

简介: gdal用于读写矢量和栅格数据集,gdal常常使用c,c++做开发,也有部分其他语言扩展如py,node。但由于其他语言的官方例子不多,且存在很多问题,所以入门非常难。

gdal用于读写矢量和栅格数据集,gdal常常使用c,c++做开发,也有部分其他语言扩展如py,node。但由于其他语言的官方例子不多,且存在很多问题,所以入门非常难。本文主要面向使用node语言做工具且对GIS软件有二次开发基础的同学,介绍使用gdal读写经典shp的入门教程。

一 node-gdal安装

Github地址:https://github.com/naturalatlas/node-gdal
使用nodejs安装:
npm install gdal --save
注意--save不能漏,笔者一开始未加,导致安装失败。

二 HelloWorld

api文档地址:http://naturalatlas.github.io/node-gdal/classes/gdal.html
由于资料很少,一切唯有官网api可供参考。本篇是个高级的helloword,用于初步描述如何使用node-gdal。下面贴出node的测试脚本gdal.js代码说明如何操作:

    var gdal=require('gdal'); 
    //r只读  r+读取修改增加  w可写
    var dataset = gdal.open("test.shp",'w');
    //获取数据集中第一个图层
    var layer = dataset.layers.get(0);
    //添加一个字段叫name,字符型
    layer.fields.add(new gdal.FieldDefn('name', gdal.OFTString));
    //构造一个feature
    var feature = new gdal.Feature(layer);
    //给字段赋值
    feature.fields.set('name', '测试');
    //构造图形并赋值
    var lineString = new gdal.LineString();
    lineString.points.add(new gdal.Point(118.5,32.1));
    lineString.points.add(new gdal.Point(118.6,32.4));
    feature.setGeometry(lineString);
    //图层添加构造的feature
    layer.features.add(feature);
    //将对shp图层的更改写入磁盘文件
    layer.flush();
    console.log("图形json串:"+layer.features.next().getGeometry().toJSON());
    console.log("图层中要素数量: " + layer.features.count());
    console.log("图层字段名称: " + layer.fields.getNames());
    console.log("边界范围: " + JSON.stringify(layer.getExtent()));
    console.log("图层坐标系: " + (layer.srs ? layer.srs.toWKT() : 'null'));

node执行输出如下:

E:\gdal>node gdal.js
图形json串:{ "type": "LineString", "coordinates": [ [ 118.5, 32.1 ], [ 118.6, 32.4 ] ] }
图层中要素数量: 1
图层字段名称: Id,name
边界范围: {"minX":0,"minY":0,"maxX":118.6,"maxY":32.4}
图层坐标系: GEOGCS["GCS_WGS_1984",DATUM["WGS_1984",SPHEROID["WGS_84",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]

在ArcMap中打开shp,效果如下:

img_2fbdfba535982982a4258d469b324bc1.png
效果图.png

注意:
如上文: var dataset = gdal.open("test.shp",'w');,w模式代表可写,否则增加字段,增加Feature会失败,提示 当前数据源是只读数据。

相关文章
|
3天前
LabVIEW使用VI服务器的调用节点将数据传递到另一个VI 使用调用节点(Invoke Node)与通过引用调用节点(Call by Reference)调用VI时有什么差别?
LabVIEW使用VI服务器的调用节点将数据传递到另一个VI 使用调用节点(Invoke Node)与通过引用调用节点(Call by Reference)调用VI时有什么差别?
|
13天前
|
消息中间件 监控 JavaScript
Node.js中的微服务架构:构建与实践
【4月更文挑战第30天】本文探讨了在Node.js中构建微服务的实践,包括定义服务边界、选择框架(如Express、Koa或NestJS)、设计RESTful API、实现服务间通信(HTTP、gRPC、消息队列)、错误处理、服务发现与负载均衡,以及监控和日志记录。微服务架构能提升应用的可伸缩性、灵活性和可维护性。
|
2月前
|
数据采集 JavaScript 前端开发
利用axios库在Node.js中进行代理请求的实践
利用axios库在Node.js中进行代理请求的实践
|
2月前
|
Web App开发 JavaScript 前端开发
深入浅出:Node.js 在后端开发中的应用与实践
【2月更文挑战第13天】本文旨在探讨Node.js这一流行的后端技术如何在现代Web开发中被应用以及它背后的核心优势。通过深入分析Node.js的非阻塞I/O模型、事件驱动机制和单线程特性,我们将揭示其在处理高并发场景下的高效性能。同时,结合实际开发案例,本文将展示如何利用Node.js构建高性能、可扩展的后端服务,以及在实际项目中遇到的挑战和解决方案。此外,我们还将讨论Node.js生态系统中的重要工具和库,如Express.js、Koa.js等,它们如何帮助开发者快速搭建和部署应用。通过本文的探讨,读者将获得对Node.js在后端开发中应用的深入理解,以及如何有效利用这一技术来提升开发效率
124 2
|
4月前
|
JavaScript 前端开发 数据安全/隐私保护
NodeJS 下构建 命令行工具(CLI) 与 交互式命令界面 的实践
NodeJS 下构建 命令行工具(CLI) 与 交互式命令界面 的实践
241 1
|
4月前
|
JavaScript 关系型数据库 MySQL
如何去掉 node.js 获取MySQL数据产生的RowDataPacket
如何去掉 node.js 获取MySQL数据产生的RowDataPacket
|
5月前
【Node】—接收参数 插入数据 实现注册功能
【Node】—接收参数 插入数据 实现注册功能
|
7月前
|
JavaScript 前端开发 API
使用 Dynatrace 对 Node.js 应用的性能数据进行分析
使用 Dynatrace 对 Node.js 应用的性能数据进行分析
32 0
|
8月前
|
人工智能 JSON JavaScript
使用 LangChain 和 Node.js 提取数据
在本篇文章中,将分享如何使用 LangChain(一个用于构建 AI 驱动应用程序的框架)通过 GPT 和 Node.js 提取和生成结构化 JSON 数据
410 0
|
9月前
|
Prometheus Cloud Native Linux
Prometheus(二)之Node Exporter采集Linux主机数据
Prometheus(二)之Node Exporter采集Linux主机数据
177 0