安裝依賴模塊
當node.js腳本在運行的時候,需要很多支持模塊,這些模塊存儲在node_modules文件夾中。該腳本在執行過程中需要使用到fs、string-format兩個支持模塊,作用分別是:
- fs:支持node腳本讀取文件。
- string-format:創建格式化字符串
新建一個文件夾,在其中安裝支持模塊。安裝過程如下:
- 打開“命令提示符”或者“終端”,輸入
npm install fs string-format
由於沒有創建package.json文件,因此無需輸入-S命令。
- 安裝編輯器自動提示支持文件(由於筆者使用的編輯器是Visual Studio Code,支持使用TypeScript腳本作為自動補全文檔的來源)。在命令提示符或終端中輸入
tsd install node -ros
輸入參數指令 -ros 的目的是在typings文件夾下創建tsd.d.ts文件,將所有用於提示的文件在這個文件中全部用
/// reference path="..."
語句引用,這樣在主文件中只需要使用
/// reference path="typings/tsd.d.ts"
引用即可出現所有的自動補全文件
編程實現
- 首先要引入安裝的依賴模塊。在文件開頭輸入
// require modules var fs = require('fs'); var format = require('string-format');
使用Visual Studio Code的話,可以在文件開頭加入 /// reference path="typings/tsd.d.ts" 插入自動補全。
- 隨后讀取JSON文件,並轉換為JSON對象。
var ShopJson = JSON.parse(fs.readFileSync("Shop_Only2100.json"));
這個JSON文件是利用ArcGIS軟件導出的數據,因此有其固定格式。在下文讀取中按照該格式進行讀取,不同文件的讀取方式不同。
- 創建寫文件流。
var ofs = fs.createWriteStream("./SqlScripts/Shop.sql");
- 讀取數據
ShopJson['features'].forEach(function(iFeature) { var iData = iFeature['attributes']; if (iData['TELEPHONE'] == ' ') { iData['TELEPHONE'] = ''; } if (iData['ADDRESS'] == ' ') { iData['ADDRESS'] = ''; } iData['Lon'] = iFeature['geometry']['points'][0][0]; iData['Lat'] = iFeature['geometry']['points'][0][1]; }, this);
- 寫文件。提取了一條數據之后,轉換為SQL語句存儲到文件中。
ofs.write(format('INSERT INTO supermarket(FID, SuperMarketNAME, KIND, TELEPHONE, REGION_ID, LONGITUDE, LATITUDE) VALUES({FID_購物_p}, "{NAME}", "{KIND}", "{"{ADDRESS}", {FID_Wuhan}, {Lon}, {Lat});\n', iData));
完成!
完整代碼
1 /// <reference path="typings/tsd.d.ts" /> 2 // convert Shop_Only2100.json to sql script 3 var fs = require('fs'); 4 var format = require('string-format') 5 // create write stream 6 var ofs = fs.createWriteStream("./SqlScripts/Shop.sql"); 7 // read file 8 var ShopJson = JSON.parse(fs.readFileSync("Shop_Only2100.json")); 9 ShopJson['features'].forEach(function(iFeature) { 10 var iData = iFeature['attributes']; 11 if (iData['TELEPHONE'] == ' ') { 12 iData['TELEPHONE'] = ''; 13 } 14 if (iData['ADDRESS'] == ' ') { 15 iData['ADDRESS'] = ''; 16 } 17 iData['Lon'] = iFeature['geometry']['points'][0][0]; 18 iData['Lat'] = iFeature['geometry']['points'][0][1]; 19 ofs.write(format('INSERT INTO supermarket(FID, SuperMarketNAME, KIND, TELEPHONE, ADDRESS, 20 REGION_ID, LONGITUDE, LATITUDE) VALUES({FID_購物_p}, "{NAME}", "{KIND}", "{TELEPHONE}", 21 "{ADDRESS}", {FID_Wuhan}, {Lon}, {Lat});\n', iData)); 22 }, this); 23 console.log("Done!")