We need to figure out a quick and fairly accurate method for point-in-polygon for lat/long values and polygons over google maps. After some research – came across some posts about mysql geometric extensions, and did implement that too –
SELECT id, Contains( PolyFromText( 'POLYGON(".$polygonpath.")' ) , PointFromText( concat( \"POINT(\", latitude, \" \", longitude, \")\" ) ) ) AS
CONTAINS
FROM tbl_points
That did not however work with polygons made up of a large number of points 🙁
After some more research – came across a standard algorithm called the Ray-casting algorithm but before trying developing a query for that in MySQL, wanted to take my chances if someone had already been through that or came across a useful link which shows how to implement the algorithm in MySQL / SQL-server.
So, cutting it short – question is:
Can anyone please provide the MySQL/SQL-server implementation of Ray casting algorithm?
Additional detail:
- Polygons are either of concave, convex or complex.
- Targeting quick execution over 100% accuracy.
The following function (MYSQL version of Raycasting algorithm) rocked my world :
Add
before the function as required.
The usage for the function is:
where
Please note that the polygon ought to be closed (normally it is closed if you’re retrieving a standard kml or googlemap data but just make sure it is – note lat1 lng1 set is repeated at the end)
I did not have points and polygons in my database as geometric fields, so I had to do something like:
I hope this might help someone.