node-gdal实践-读写shp数据
node-gdal实践-读写shp数据
遥想公瑾当年 发表于8个月前
node-gdal实践-读写shp数据
  • 发表于 8个月前
  • 阅读 11
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

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,效果如下: 效果图.png 注意: 如上文:var dataset = gdal.open("test.shp",'w');,w模式代表可写,否则增加字段,增加Feature会失败,提示 当前数据源是只读数据。

共有 人打赏支持
粉丝 6
博文 11
码字总数 17519
×
遥想公瑾当年
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: