开发者社区> 遥想公瑾> 正文

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会失败,提示 当前数据源是只读数据。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
node笔记记录42fs模块1
node笔记记录42fs模块1
4 0
node笔记记录43fs模块2
node笔记记录43fs模块2
6 0
node笔记记录38path和fs
node笔记记录38path和fs
12 0
node笔记记录39path和fs2
node笔记记录39path和fs2
5 0
node笔记记录40path和fs3
node笔记记录40path和fs3
6 0
node笔记记录41path和fs4
node笔记记录41path和fs4
6 0
node 复制文件的五种方式
node 复制文件的五种方式
79 0
node24-nodejs模块化的开发导出另一种方式
node24-nodejs模块化的开发导出另一种方式
28 0
node26-系统模块path路径操作
node26-系统模块path路径操作
12 0
node-文件写入操作
node-文件写入操作
14 0
+关注
遥想公瑾
个人专业是地理信息系统,拥有较丰富的GIS开发经验,对GIS在前端可视化和空间数据库(PostGIS,PostgreSQL)领域比较感兴趣。工作中致力于解决大量地理数据渲染问题,大量地理数据存储和空间查询优化。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载