php - 如何使用Haversine公式使用sql语句计算距离内
问题描述
$sql = "SELECT *, ( 6371 * acos( cos( radians(37) ) * cos( radians( ".$_GET["lat"]." ) ) * cos( radians( ".$_GET["lng"]." ) - radians(-122) ) + sin( radians(37) ) * sin( radians( ".$_GET["lat"]." ) ) ) ) AS distance FROM markers HAVING distance < 0.5 ORDER BY distance LIMIT 0 , 1";
根据我对死亡的快速浏览,我意识到我的 $_GET 对于它在做什么没有意义。原来的公式是这样的
SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;
我找不到任何关于如何实现这一点的好教程。我只需要知道把它放在哪里!我的纬度和经度..在sql语句中,因此它可以计算彼此周围的IF以组合在一起。
一个成员回答了这个问题..我觉得几乎没有关于如何在sql中使用这个公式的解释..
更新
我不是要抨击。我知道他们解释得很清楚,我只是由于某种原因缺乏理解它的能力。很多道歉链接。
更新
还是有烦恼。我尝试这样调整代码。这样做是否正确?因为我插入了两个相同的地理位置坐标,它们应该组合在一起,但不是。
<?php
$lat1=$_GET["lat"];
$lng1=$_GET["lng"];
$lat2=$grouping[$counter][1];
$lng2=$grouping[$counter][2];
$sql = "SELECT id, status, ( 6371 * acos( cos( radians($lat1) ) * cos( radians( $lat2 ) )
* cos( radians( $lng2 ) - radians($lng1) ) + sin( radians($lat1) ) * sin(radians($lat2)) ) ) AS distance FROM markers HAVING distance < 0.5 ORDER BY distance LIMIT 0 , 2;";
?>
解决方案
推荐阅读
- javascript - 具有指数时间复杂度 O(c^n) 的 for 循环是否可能?
- firebase - 找不到 Firestore-algolia-search 命令
- spring - 如何在使用 OAuth2 社交登录保护 REST API 的同时配置 Spring Boot 登录页面
- spring-cloud-dataflow - 通过 UI 或 Shell 检索/自定义 Spring Cloud Data Flow 注册/预先存在的应用程序
- android - 颤振:io.flutter.embedding.engine.FlutterJNI.loadLibrary
- angular - 如何从`Observable {_isScalar:false,source:BehaviorSubject}`中获取_value
- sql - 关于“函数“和”不是一元运算符”的错误
- sql - 将值“1”设置为整个数据库中所有表的特定列?
- xamarin.forms - 如何将 azure B2C 与 Essentials 一起使用:Web Authenticator?
- java - 使用 openapi 生成器生成的代码在 gradle 中失败,但在 maven 中没有