5.6版本提供了原生的距离计算函数支持,下面是文档翻译:
- [ST_Distance(g1, g2)]
返回g1和g2之间的距离。如果其中任何一个点为NULL
或者空,则返回NULL
如果中间或结尾的结果产生了 NaN 或者复数,将会触发ER_GIS_INVALID_DATA
错误
mysql> SET @g1 = Point(1,1);
mysql> SET @g2 = Point(2,2);
mysql> SELECT ST_Distance(@g1, @g2);
+-----------------------+
| ST_Distance(@g1, @g2) |
+-----------------------+
| 1.4142135623730951 |
+-----------------------+
ST_Distance() 和 Distance() 是相同的,计算结果为平面上两点距离
下面是使用 ST_Distance_Sphere
的示例,来自于 5.7 版本,用于计算球面距离
StationInfo::query()
->selectRaw('*,ST_Distance_Sphere(point(StationLng, StationLat),point(?, ?)) as distance', [
$deviceLng,
$deviceLat,
])
StationInfo::query()
->whereRaw('ST_Distance_Sphere(point(StationLng, StationLat),point(?, ?)) <= ?', [
$deviceLng,
$deviceLat,
$maxDistance
])
网友评论