簡體   English   中英

如何找到沿折線 Mysql 的最近距離

[英]How To find the nearest distance along a polyline Mysql

我正在構建一個拼車應用程序。

該應用程序具有搜索驅動程序的功能。

司機(工作中心的員工)可以從應用程序中選擇前往目的地的路線。

同樣屬於工作中心並且在路線內的乘客可以加入他們的行程。

這是在用戶在應用程序中輸入目的地后通過搜索功能完成的。

這是游樂設施的表結構

id  driver_id path
 1     1       BLOB 

這里driver id是 driver 的 id, path是從驅動程序源到目的地的行字符串。為了簡單起見,我不會包含其他字段

我的任務是找到所有經過我的位置且匹配率達到 85% 或以上的司機

After having a look at Mysql spatial Types https://dev.mysql.com/doc/refman/8.0/en/spatial-types.html I wrote a query of my own which looks partially ok, Please see the query below

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_Distance(@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_Distance(@g1, @g2, '米') |  |  -----------------------------------------: |  |  247.0472114965831 |

db<> 在這里擺弄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM