当前位置 : 主页 > 网页制作 > Nodejs >

使用node.js在mysql中插入几何值

来源:互联网 收集:自由互联 发布时间:2021-06-16
我正在使用带有node.js的 https://github.com/felixge/node-mysql模块. Mysql表有一个POINT类型的字段.该模块需要发送数组数组以插入批量记录.但它似乎没有指定数据类型的选项. 很自然地,下面的内
我正在使用带有node.js的 https://github.com/felixge/node-mysql模块.

Mysql表有一个POINT类型的字段.该模块需要发送数组数组以插入批量记录.但它似乎没有指定数据类型的选项.

很自然地,下面的内容用引号括起来

var loc = "GeomFromText('POINT(" + lat + "," + lon + ")')";

有人试过吗?如何说服查询构建器将其视为sql函数?

或者我是否必须创建自己的查询构建器?

这是 kevinhikaruevans的 pull request.您可以执行类似的操作将对象转换为点:

if (typeof val === 'object') {
    if(val.hasOwnProperty('lat') && val.hasOwnProperty('long')) {
        return 'POINT(' + [val.lat, val.long].map(parseFloat).join(',') + ')';
    }
}

假设你有一个只有POINT类型的字段点的表mytable,你可以像这样插入它们:

var points = [
    [{ lat: 1, long: 4}],
    [{ lat: 23, long: -8.345}]
];
var query = connection.query('INSERT INTO mytable(point) VALUES ?', [points], your_callback_func);
console.log("Query: " + query.sql);

这将生成类似于的查询:

INSERT INTO mytable(point)
VALUES (POINT(1,4)), (POINT(23,-8.345))

这会将具有lat和long字段的任何对象转换为MySQL点.如果这不是预期的行为,您可以创建一个Point类并使用它而不是普通对象,并在lib / protocol / SqlString.js中检查该值是否是Point的实例.

网友评论