无法在MySQL中将WKB插入POINT列

时间:2017-08-03 09:42:43

标签: mysql node.js spatial

我正在构建一个管理我所在地区兴趣点的Node.js应用程序。我通过使用wkx将latlong坐标转换为WKB缓冲区来插入POI,然后将其插入MySQL中的POINT列。该查询是使用Knex.js构建的。以下是查询的外观:

INSERT INTO `places` (`name`, `coordinate`)
    VALUES ('Null Island', X'00000000010100000000000000000000000000000000000000')

抛出Cannot get geometry object from data you send to the GEOMETRY field

我修改了它所以它变成了这个:

INSERT INTO `places` (`name`, `coordinate`)
    VALUES ('Null Island', UNHEX('00000000010100000000000000000000000000000000000000'))

但它仍然无法奏效。我终于只使用ST_GEOMFROMTEXT(0 0)才能使它工作。即使我把它拧成这样,它也能正常工作:

INSERT INTO `places` (`name`, `coordinate`)
    VALUES ('Null Island', UNHEX(HEX(ST_GEOMFROMTEXT('POINT(0 0)')))

出了什么问题?如何让它直接从缓冲区工作? 我怀疑我的问题与this one类似。

1 个答案:

答案 0 :(得分:0)

来自MySQL Reference Manual on Supported Spatial Data Formats

  

在内部,MySQL以与WKT或WKB格式不同的格式存储几何值。 (内部格式类似于WKB,但最初的4个字节表示SRID。)

因此,插入WKB值(例如wkx)生成的值不能直接完成。相反,请按照here.

所述使用ST_GEOMFROMWKB()