javascript - 如何在其他条件下应用 Haversine Formula?

标签 javascript mysql sql

假设我有这两个表:

the_schedule_table:

+-----+---------------------+---------------------+-----------+------------+
| id  | start_date          | end_date            | latitude  | longitude  |
+-----+---------------------+---------------------+------------------------+
| 1   | 2017-07-17 12:00:00 | 2017-07-17 14:00:00 | 42.330078 | -83.045074 |
| 2   | 2017-07-17 8:00:00  | 2017-07-17 11:00:00 | 42.330380 | -83.037918 |
| 3   | 2017-07-17 13:00:00 | 2017-07-17 15:00:00 | 42.351314 | -83.067020 |
| 4   | 2017-07-17 11:00:00 | 2017-07-17 13:00:00 | 42.474879 | -83.241544 |
| 5   | 2017-07-17 15:00:00 | 2017-07-17 17:00:00 | 42.271986 | -83.742137 |
+-----+---------------------+---------------------+-----------+------------+

团队:

+-----+--------+------+
| id  | member | mate | 
+-----+--------+------+
| 1   | 1      | 2    | 
| 2   | 1      | 3    | 
| 3   | 1      | 4    | 
| 4   | 1      | 5    | 
| 5   | 2      | 1    | 
+-----+--------+------+

然后,假设 Id = 1 使用特定的 start_date|end_datelatitude|longitude 调用 API,调用它们 target,并想知道在他的数据 X 距离内有哪些伙伴,并且他们的 start_date->end_date 不与他的重叠。

对于重叠,我可以这样做:(StartA > EndB) and (EndA < StartB)

对于距离,我需要结合这个:SQL query of Haversine formula

这个sql语句怎么写?

编辑: 我有重叠的部分,我测试了它并给出了正确的结果:

// query overlapped activites - based on data time
const myQuery = 
    "SELECT * FROM schedule " +
    "WHERE start_date > '" + toMySqlFormat(target_end_date) +
    "' AND '" + toMySqlFormat(target_start_time) + "' > end_date";

现在我得到纬度、经度和 ID,然后我要检查距离吗?最后谁是队友?或者我是从寻找伙伴开始,然后是重叠,然后是距离?.. 等等。我认为我的开始是正确的,但我想优化它以使其尽可能快。基本上有 3 个条件:

  • 他们是同 table (不同 table )

  • 他们的时间不重叠(同 table )

  • 他们在x距离之内(同一张 table )

斗争是真实的。

最佳答案

您将有 4 个参数@member_id、@start_date、@end_date、@distance

您需要使用JOIN 找出member = 1 的伙伴

然后您可以查明这些伙伴是否与日期不重叠。您链接中的条件表示重叠,您需要反转条件,因此添加 NOT

最后使用检查公式的结果是否小于@distance

 SELECT *
 FROM member M 
 JOIN the_schedule_table S
   ON M.mate = S.id
 WHERE NOT (S.start_date < @end_date AND S.end_date > @start_date)
   AND ( { Haversine formula } ) < @distance
   AND M.member = @member_id

关于javascript - 如何在其他条件下应用 Haversine Formula?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45825448/

相关文章:

mysql - 如何删除由于在mysql中的分隔符后在新行中输入每个数据而导致的分隔符后的多余空格

MySQL Workbench 1064 语法错误

php - C++程序调用PHP脚本上传内容到数据库

sql - 使用存储过程在 SQL Server 中执行结果

javascript - Vue 组件回收导致 watch 意外起火

javascript - 为什么我的 z-index 不起作用?

java - 使用 javascript 提交按钮登录网站(使用 Java)

sql - 如何在 sql 中获取 123456 个数字的前 3 位数字?

mysql - 如何添加多个外键?

javascript - 如何确定 javaScript 中扩展运算符结果的数据类型?