gdal用于讀寫矢量和柵格數(shù)據(jù)集谭确,gdal常常使用c帘营,c++做開發(fā),也有部分其他語言擴(kuò)展如py逐哈,node芬迄。但由于其他語言的官方例子不多,且存在很多問題昂秃,所以入門非常難禀梳。本文主要面向使用node語言做工具且對GIS軟件有二次開發(fā)基礎(chǔ)的同學(xué)杜窄,介紹使用gdal讀寫經(jīng)典shp的入門教程。
一 node-gdal安裝
Github地址:https://github.com/naturalatlas/node-gdal
使用nodejs安裝:
npm install gdal --save
算途。
注意--save不能漏塞耕,筆者一開始未加,導(dǎo)致安裝失敗郊艘。
二 HelloWorld
api文檔地址:http://naturalatlas.github.io/node-gdal/classes/gdal.html
由于資料很少荷科,一切唯有官網(wǎng)api可供參考。本篇是個(gè)高級的helloword纱注,用于初步描述如何使用node-gdal。下面貼出node的測試腳本gdal.js代碼說明如何操作:
var gdal=require('gdal');
//r只讀 r+讀取修改增加 w可寫
var dataset = gdal.open("test.shp",'w');
//獲取數(shù)據(jù)集中第一個(gè)圖層
var layer = dataset.layers.get(0);
//添加一個(gè)字段叫name胆胰,字符型
layer.fields.add(new gdal.FieldDefn('name', gdal.OFTString));
//構(gòu)造一個(gè)feature
var feature = new gdal.Feature(layer);
//給字段賦值
feature.fields.set('name', '測試');
//構(gòu)造圖形并賦值
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);
//圖層添加構(gòu)造的feature
layer.features.add(feature);
//將對shp圖層的更改寫入磁盤文件
layer.flush();
console.log("圖形json串:"+layer.features.next().getGeometry().toJSON());
console.log("圖層中要素?cái)?shù)量: " + layer.features.count());
console.log("圖層字段名稱: " + layer.fields.getNames());
console.log("邊界范圍: " + JSON.stringify(layer.getExtent()));
console.log("圖層坐標(biāo)系: " + (layer.srs ? layer.srs.toWKT() : 'null'));
node執(zhí)行輸出如下:
E:\gdal>node gdal.js
圖形json串:{ "type": "LineString", "coordinates": [ [ 118.5, 32.1 ], [ 118.6, 32.4 ] ] }
圖層中要素?cái)?shù)量: 1
圖層字段名稱: Id,name
邊界范圍: {"minX":0,"minY":0,"maxX":118.6,"maxY":32.4}
圖層坐標(biāo)系: 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會(huì)失敗,提示 當(dāng)前數(shù)據(jù)源是只讀數(shù)據(jù)厚柳。