Find the distance between two points in MYSQL. (using the Point Datatype)
Question
Suppose I have a 2 column table like this:
| user_id | int(11) | NO | UNI | NULL | |
| utm | point | NO | MUL | NULL | |
As you can see, it's very simple. utm is a Point data-type. I insert it like this:
INSERT INTO mytable(user_id, utm) VALUES(1, PointFromWKB(point(50, 50)));
Then, I create a Spatial index.
ALTER TABLE mytable ...add spatial index on(utm) or something. (forgot)
Alright, everything is good. Now , I want to select * where distance < 99999. But it doesn't work!
//This is supposed to select all where the distance is less than 99999999.
set @mypoint = PointFromWKB(point(20,20))
select * from mytable where GLength(LineString(utm, @mypoint)) < 9999999;
Empty set (0.00 sec)
select * from mytable where GLength(LineStringFromWKB(LineString(utm, @mypoint))) < 9999;
Empty set (0.00 sec)
By the way, I have tried to INSERT INTO without the PointFromWKB...and it didn't work...that's why someone suggested that PointFromWKB to me.
Solution
Solved. This is what I did:
where GLength(LineStringFromWKB(LineString(asbinary(utm), asbinary(@mypoint)))) < 9999999999999;
OTHER TIPS
You can also do it this way. Not sure if it's faster or not.
select * from mytable where glength(geomfromtext(concat('linestring(', x(utm), ' ', y(utm), ',20 20', ')'))) < 99999999
As far as I know, u have to try this way-
select * from mytable
where
(
GLength(
LineStringFromWKB(
LineString(
geoPoint,
GeomFromText('POINT(51.5177 -0.0968)')
)
)
)
) < 99999999
More in this answer.
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow