如何找到沿折线的最近距离 Mysql
How To find the nearest distance along a polyline Mysql
我正在构建一个拼车应用程序。
该应用程序具有搜索 drivers 的功能。
drivers(工作中心的员工)可以从应用程序中选择到达目的地的路线。
同样属于工作枢纽且在路线内的乘客可以加入他们的行程。
这是在用户在应用中输入目的地后通过搜索功能实现的。
这是table游乐设施的结构
id driver_id path
1 1 BLOB
这里driver id
是driver的id,path
是从driver的源到destination.For的行字符串为了简单起见我赢了'包括其他字段
我的任务是找到所有经过我所在位置且骑行匹配度达到 85% 或以上的 drivers
看了 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
添加一些覆盖距离到 return true 我不知道。
我预计骑行匹配度超过 85%。
我的意思是用户不必属于driver选择的行字符串,允许小的公差。
我正在使用 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_Distance(@g1, @g2, 'metre') |
| -----------------------------: |
| 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_Distance(@g1, @g2, 'metre') |
| -----------------------------: |
| 247.0472114965831 |
db<>fiddle here
我正在构建一个拼车应用程序。
该应用程序具有搜索 drivers 的功能。
drivers(工作中心的员工)可以从应用程序中选择到达目的地的路线。
同样属于工作枢纽且在路线内的乘客可以加入他们的行程。
这是在用户在应用中输入目的地后通过搜索功能实现的。
这是table游乐设施的结构
id driver_id path
1 1 BLOB
这里driver id
是driver的id,path
是从driver的源到destination.For的行字符串为了简单起见我赢了'包括其他字段
我的任务是找到所有经过我所在位置且骑行匹配度达到 85% 或以上的 drivers
看了 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
添加一些覆盖距离到 return true 我不知道。
我预计骑行匹配度超过 85%。
我的意思是用户不必属于driver选择的行字符串,允许小的公差。
我正在使用 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_Distance(@g1, @g2, 'metre') | | -----------------------------: | | 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_Distance(@g1, @g2, 'metre') | | -----------------------------: | | 247.0472114965831 |
db<>fiddle here