Php 基于lng和lat实现haversine距离查询
我在开发这个时遇到了一个问题 我实现了这个在模型上运行的作用域函数,如 清单:最近($lat,$lng)->分页(5)Php 基于lng和lat实现haversine距离查询,php,mysql,laravel,haversine,Php,Mysql,Laravel,Haversine,我在开发这个时遇到了一个问题 我实现了这个在模型上运行的作用域函数,如 清单:最近($lat,$lng)->分页(5) 当我使用havingRaw时,laravel似乎将其应用于第一个查询,当然它将失败。但是为什么它要将它应用于第一个查询而不是第二个查询呢?我就是这样做的。。我需要查询半径为5公里的距离。我使用了whereRaw和paginate $vtl = VehicleTrackerLog::whereRaw("( 1
当我使用havingRaw时,laravel似乎将其应用于第一个查询,当然它将失败。但是为什么它要将它应用于第一个查询而不是第二个查询呢?我就是这样做的。。我需要查询半径为5公里的距离。我使用了
whereRaw
和paginate
$vtl = VehicleTrackerLog::whereRaw("(
111.1111
*DEGREES(ACOS(COS(RADIANS('-33.873415'))
* COS(RADIANS(lat))
* COS(RADIANS('151.227538' - lng))+ SIN (RADIANS('-33.873415'))
* SIN(RADIANS(lat))))<=5)"
)->paginate(5);
$vtl=VehicleTrackerLog::whereRaw(“(
111.1111
*度(ACOS(弧度('-33.873415'))
*COS(弧度(纬度))
*COS(弧度('151.227538'-lng))+SIN(弧度('-33.873415'))
*SIN(弧度(lat)))你的要求是什么,你能解释一下吗?你想根据给定的纬度和经度得到最近的5个位置吗?5只是一个例子,我需要这个分页。如果是我,我只需要运行查询,让用户决定结果是否应该以公里、英里、联盟、链或其他形式显示-在JavaScripty中我没有尝试过这个方法et但它看起来很棒,以英里为单位,我用什么来代替111.1111?对于英里,用公里除以1.609344so“
array:2 [▼
0 => array:3 [▼
"query" => "select count(*) as aggregate from `listings`"
"bindings" => []
"time" => 0.48
]
1 => array:3 [▼
"query" => "select *, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance from `listings` limit 5 offset 0"
"bindings" => []
"time" => 0.97
]
]
$vtl = VehicleTrackerLog::whereRaw("(
111.1111
*DEGREES(ACOS(COS(RADIANS('-33.873415'))
* COS(RADIANS(lat))
* COS(RADIANS('151.227538' - lng))+ SIN (RADIANS('-33.873415'))
* SIN(RADIANS(lat))))<=5)"
)->paginate(5);