node-gdal實踐-讀寫shp數據

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容