Bit of a strange one. I’m trying to insert MySQL point coordinates and return in PHP, but I get ascii put instead of coordinates.
This is my 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)'));
In PHP I have code such as this (which works for other fields)
$row['cntr_point']
But I get random ascii character output such as this:
*H@v0b1@
When I would instead be expecting to see the coordinates I inserted. I seem to get the same even when I skip PHP and use something like SQLfiddle:
Any help would be appreciated
CodePudding user response:
You can use ST_AsText
:
SELECT id, ST_AsText(cntr_point) FROM Grid
Output: POINT(49.227239 17.564932)
Or you can use ST_X
and ST_Y
to get the coordinates:
SELECT id, ST_X(cntr_point), ST_Y(cntr_point) FROM Grid;
CodePudding user response:
The POINT
data type contains binary data. Try ST_AsWkt() to get it displayed as text.
SELECT id, ST_AsWkt(cntr_point) FROM Grid
In MySQL's OpenGIS extension, geometric columns like your POINT
column are stored in the so-called Well-Known Binary (WKB) format. ST_AsWkt() converts WKB to Well-Known Text (WKT).
The constant you use in your INSERT, 'POINT(49.227239 17.564932)'
, is an example of WKT. The POINTFROMTEXT() function you use to load your table converts the other way.
So, yes, if you want just the long/lat data, you'll have to extract it from the WKT in your php program. Or, you could use GeoPHP to handle WKB directly if that makes sense in your app.