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會失敗,提示 當前數據源是只讀數據。