GIS开发:mysql空间数据导出geojson
使用nodejs,实现将mysql数据库中的空间数据表,导出成geojson的矢量图层文件,保存。
安装fs、wellknow和mysql三个nodejs类库:
let fs = require("fs");
let parset = require('wellknown');
let mysql = require('mysql');
//创建mysql的数据库连接
let connection = mysql.createConnection({
//主机地址 (
host : 'localhost',
//用户名
user : 'root',
//密码
password : '******',
//在mysql中创建的数据库名
database : 'database'
});
//连接到数据库
connection.connect();
// var tabletype;
let tabledata = [];
//查询空间坐标的数据,并保存
const sqlb="select st_ASTEXT(geometry) AS geo from dbname";
connection.query(sqlb, function (error, results, fields) {
for(let k=0;k<results.length;k++){
let tst={};
tst =parset(results[k].geo);
tabledata.push(tst);
}
});
//查询空间数据表中的其他属性字段数据,并保存
let sql="select * from dbname";
connection.query(sql , function (error, results, fields) {
let dataJson = results;
let features=[];
let name =[];
let n =0;
for(let t in dataJson[0] ) {
n++;
name[n] =t;
}
//将数据库中的数据,拼接成geojson的格式
for(let i=0;i<dataJson.length;i++){
let fdata = {};
let pdata = {};
fdata["type"]="Feature";
fdata["properties"] =pdata;
for(let j=1;j<name.length-1;j++){
pdata[name[j]] =dataJson[i][name[j]];
}
fdata["geometry"] =tabledata[i];
features.push(fdata);
}
//添加geojson的数据头信息
var road = [] ;
var roaddata ={};
roaddata["type"] ="FeatureCollection";
roaddata["name"] ="roadcenter";
roaddata["crs"] = { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } };
roaddata["features"] =features;
road.push(roaddata);
//保存geojson文件
var roadjson =JSON.stringify(roaddata);
fs.writeFileSync('filepath',roadjson);
});