安装依赖模块
当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));
完成!
完整代码
/// <reference path="typings/tsd.d.ts" />
// convert Shop_Only2100.json to sql script
var fs = require('fs');
var format = require('string-format')
// create write stream
var ofs = fs.createWriteStream("./SqlScripts/Shop.sql");
// read file
var ShopJson = JSON.parse(fs.readFileSync("Shop_Only2100.json"));
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];
ofs.write(format('INSERT INTO supermarket(FID, SuperMarketNAME, KIND, TELEPHONE, ADDRESS,
REGION_ID, LONGITUDE, LATITUDE) VALUES({FID_购物_p}, "{NAME}", "{KIND}", "{TELEPHONE}",
"{ADDRESS}", {FID_Wuhan}, {Lon}, {Lat});\n', iData));
}, this);
console.log("Done!")