【问题标题】:Cannot insert WKB to POINT column in MySQL无法将 WKB 插入 MySQL 中的 POINT 列
【发布时间】:2018-01-20 06:10:35
【问题描述】:

我正在构建一个 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 类似。

【问题讨论】:

    标签: mysql node.js spatial


    【解决方案1】:

    来自MySQL Reference Manual on Supported Spatial Data Formats

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

    因此,不能直接插入 WKB 值(例如由wkx 生成的值)。相反,请使用ST_GEOMFROMWKB(),如here. 所述

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-15
      • 1970-01-01
      • 2018-07-08
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      • 2017-05-20
      • 2020-07-31
      相关资源
      最近更新 更多