I have a table in a MySQL database with a spatial geometry column of type POINT. I'd like to be able to take a point at the center of a map and find all records within X miles (or whatever distance) of it. I can't seem to find a good example or explanation of how to do this that doesn't get heavily into geometric math. I'm happy to go that route, but would first like to try and solve it with a true spatial database.
1 Answer
It won't work because MySQL hasn't actually implemented the code to make this work. They only use bounding box queries.
Notice there are no functions listed here: http://dev.mysql.com/doc/refman/5.5/en/functions-for-testing-spatial-relations-between-geometric-objects.html
I would reccomend using PostGIS or Spatialite instead.
3 Comments
Ben Regenspan
This is no longer true as of MySQL 5.6.1: dev.mysql.com/doc/refman/5.6/en/… . But I can't (yet) attest to the performance of these functions.
TheSteve0
Agreed - things have changed with MySQL 5.6.1 but I haven't tested yet either
Travis Webb
I see tons of functions listed at that resource. Can you clarify?
WHERE lat BETWEEN minL AND maxL AND lon BETWEEN minO AND maxO. This is square area search instead of a circle but your web map is rectangular anyway, isn't it?