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

Sal*_*man 3 mysql point node.js

我在node.js上使用https://github.com/felixge/node-mysql模块.

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

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

var loc = "GeomFromText('POINT(" + lat + "," + lon + ")')";
Run Code Online (Sandbox Code Playgroud)

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

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

Sal*_*lem 5

有一个来自kevinhikaruevans拉动请求.您可以执行类似的操作将对象转换为点:

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

假设您有一个mytablepoint包含类型字段的表POINT,您可以像这样插入它们:

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);
Run Code Online (Sandbox Code Playgroud)

这将生成类似于的查询:

INSERT INTO mytable(point)
VALUES (POINT(1,4)), (POINT(23,-8.345))
Run Code Online (Sandbox Code Playgroud)

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