有點奇怪。我正在嘗試插入 MySQL 點坐標并在 PHP 中回傳,但我得到的是 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 之類的東西,我似乎也得到了相同的結果:
SQL小提琴
任何幫助,將不勝感激
uj5u.com熱心網友回復:
您可以使用ST_AsText:
SELECT id, ST_AsText(cntr_point) FROM Grid
輸出: POINT(49.227239 17.564932)
或者您可以使用ST_X和ST_Y來獲取坐標:
SELECT id, ST_X(cntr_point), ST_Y(cntr_point) FROM Grid;
小提琴
uj5u.com熱心網友回復:
該POINT資料型別包含二進制資料。嘗試ST_AsWkt()使其顯示為文本。
SELECT id, ST_AsWkt(cntr_point) FROM Grid
在 MySQL 的 OpenGIS 擴展中,像您的列這樣的幾何列POINT以所謂的眾所周知的二進制(WKB) 格式存盤。ST_AsWkt() 將 WKB 轉換為眾所周知的文本(WKT)。
您在 INSERT, 中使用的常量'POINT(49.227239 17.564932)'是 WKT 的一個示例。用于加載表的POINTFROMTEXT()函式以另一種方式進行轉換。
所以,是的,如果您只需要 long/lat 資料,則必須從 php 程式的 WKT 中提取它。或者,如果在您的應用程式中有意義,您可以使用GeoPHP直接處理 WKB。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/394805.html
