mysql - 在mysql中测量两个纬度/经度点之间的距离
问题描述
我在mysql中有以下查询
SELECT id,
(SELECT ( 6371 * Acos(Cos(Radians('31.502537032937294')) *
Cos(Radians(lat)) *
Cos(
Radians(lng) - Radians(
'74.34226725250483'))
+
Sin(
Radians('31.502537032937294')) *
Sin(Radians(lat))) ) AS distance
FROM `addresses`
WHERE orders.id = addresses.order_id
AND `type` = 'from'
AND `address_for` = 'order'
AND `is_archive` = 0
HAVING `distance` <= 50) AS distance
FROM orders
WHERE `is_archive` = 0
AND `is_complete` = 0
AND `status_id` = 1
AND Date(`expected_pick_up_at`) = '2018-09-10'
其中,我正在计算订单与当前位置的距离。此查询的结果如下
id distance
1027 3.392817926161619
1028 2.957290773676651
虽然实际距离是
id distance
1027 0.09565605656865
1028 0.43565656101560
保存在我从中计算距离的数据库中的原始纬度/经度为
id lat long
1027 31.53189017798653 74.35203921049833
1028 31.52842855342999 74.34939790517092
谁能指导我在这方面做错了什么,
注意:我还查看了以下问题
解决方案
推荐阅读
- c++ - 我正在尝试计算 char 数组中的内容直到空终止,但是每次编译时我都会得到一个大于数组的数字
- pandas - 如何在 k-means 聚类中设置每个聚类的最小观测数?
- excel - 等到 Chrome 中出现警报
- c# - 如何在另一个游戏对象上生成预制件
- sql - sql oracle计数小写/大写
- r - How I do to obtain the solution for Random Effects using package lme4?
- javascript - Check if integer contains digit javascript
- javascript - 测试一个简单的快速应用程序:未捕获的 ReferenceError: done is not defined
- c++ - 如何类型转换为模板成员函数参数?
- node.js - 将护照与Nodejs一起使用时何时将会话设置为false