插入查询 MySQL 点值 returns ASCII

Insert and query MySQL point value returns ASCII

我有一个奇怪的问题。我试图在 PHP 中插入 MySQL 点坐标和 return,但我得到的是 ASCII 码而不是坐标。

这是我的SQL

CREATE TABLE `Grid` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `cntr_point` POINT DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB;

INSERT INTO `Grid`(cntr_point) 
VALUES(POINTFROMTEXT('POINT(49.227239 17.564932)'));

在PHP中我有这样的代码(适用于其他领域):

$row['cntr_point']

但是我得到了这样的随机 ASCII 字符输出:

*H@v0b1@

当我反而期望看到我插入的坐标时。即使我跳过 PHP 并使用 SQLFiddle:

之类的东西,我似乎也会得到同样的结果

SQLFiddle

您可以使用 ST_AsText:

SELECT id, ST_AsText(cntr_point) FROM Grid

输出:POINT(49.227239 17.564932)

或者您可以使用 ST_XST_Y 来获取坐标:

SELECT id, ST_X(cntr_point), ST_Y(cntr_point) FROM Grid;

Fiddle

POINT 数据类型包含二进制数据。尝试 ST_AsWkt() 使其显示为文本。

SELECT id, ST_AsWkt(cntr_point) FROM Grid

在 MySQL 的 OpenGIS 扩展中,像您的 POINT 列这样的几何列存储在所谓的 Well-Known Binary (WKB) format. ST_AsWkt() converts WKB to Well-Known Text (WKT) 中。

您在 INSERT 中使用的常量 'POINT(49.227239 17.564932)' 是 WKT 的一个示例。您用来加载 table 的 POINTFROMTEXT() 函数会以另一种方式转换。

所以,是的,如果您只需要 long/lat 数据,则必须从 php 程序中的 WKT 中提取它。或者,如果在您的应用中有意义,您可以使用 GeoPHP 直接处理 WKB。