如何找到沿多段线最近的距离Mysql



我正在构建一个拼车应用程序。

该应用程序具有搜索驱动程序的功能。

司机(工作中心的员工(可以从应用程序中选择前往目的地的路线。

乘客也属于工作中心,并且在路线内,可以加入他们的骑行。

这是通过用户在应用程序中输入目的地后的搜索功能实现的。

这是游乐设施的表格结构

id  driver_id path
1     1       BLOB 

这里driver id是驱动程序的id,path是从驱动程序源到目的地的字符串。为了简单起见,我不包括其他字段

我的任务是找到所有通过我所在位置的司机,他们的达到85%或以上

看了Mysql spatial Types之后https://dev.mysql.com/doc/refman/8.0/en/spatial-types.html我写了一个我自己的查询,看起来部分正常,请参阅下面的查询

set @g1=ST_GeomFromText('LINESTRING(10.013059 76.363075,10.0168011
76.34592529999999,10.0161831
76.34368020000001,10.0118 76.3218,9.99848 76.311936,9.9771685 76.2773228
)');
SET @g2 = ST_GeomFromText('Point(10.0141713 76.33320359999999
)');

SELECT MBRCovers(@g1,@g2)

工作良好Point(10.0141713 76.33320359999999)Point(10.013059 76.363075) and point(9.9771685 76.2773228)之间

但这不起作用

set @g1=ST_GeomFromText('LINESTRING(10.013059 76.363075,10.0168011
76.34592529999999,10.0161831
76.34368020000001,10.0118 76.3218,9.99848 76.311936,9.9771685 76.2773228
)');
SET @g2 = ST_GeomFromText('Point(10.0185876 76.3439941
)');

SELECT MBRCovers(@g1,@g2)

Point(10.0185876 76.3439941)也介于Point(10.013059 76.363075) and point(9.9771685 76.2773228)、之间

我想我需要为上面的point添加一些覆盖距离,以返回我不知道的true。

我期待85%以上的比赛。

我的意思是,用户不必属于驱动器选择的字符串,允许小公差。

我使用的是mysql版本8。

请帮忙。

set @g1=ST_GeomFromText('LINESTRING(10.013059  76.363075,
10.0168011 76.34592529999999,
10.0161831 76.34368020000001,
10.0118    76.3218,
9.99848    76.311936,
9.9771685  76.2773228)', 4326);
SET @g2 = ST_GeomFromText('Point(10.0141713 76.33320359999999)', 4326);
SELECT ST_Distance(@g1, @g2, 'metre');
|ST_距离(@g1,@g2,'米'(||-------------------------:||9.402168864952756 |
set @g1=ST_GeomFromText('LINESTRING(10.013059  76.363075,
10.0168011 76.34592529999999,
10.0161831 76.34368020000001,
10.0118    76.3218,
9.99848    76.311936,
9.9771685  76.2773228)', 4326);
SET @g2 = ST_GeomFromText('Point(10.0185876 76.3439941)', 4326);
SELECT ST_Distance(@g1, @g2, 'metre');
|ST_距离(@g1,@g2,'米'(||-------------------------:||247.0472114965831 |

db<gt;小提琴这里

最新更新