所以,我有一个保存“路线”的数据库(即起点和终点,纬度/经度格式'StartLat','StartLng'和'EndLat',my'EndLng')。目前,人们可以通过他们的起点或终点搜索这些路线(例如“查找起点在我的 LatLng 位置 5 英里范围内的路线。”)。他们可以通过它们的起点或终点来查找它们(例如“在此标记范围内查找起点”或“在此标记范围内查找终点”)。
我目前有一个基于 Haversine 公式的 SQL 查找,这对我来说非常有效。
我想要做的是在一个 SQL 字符串中将两个查询连接在一起,以便能够“找到起点在“Place A”的“x”英里范围内且终点在“x”范围内的所有路线英里的“地方B”。
我有一种感觉,最优雅的方法是在我现有的 SQL 字符串上创建一个连接,但我一生都无法弄清楚如何做!
我当前的 SQL 字符串如下所示:
SELECT ID, RouteCode, (3959 * acos(cos(radians('51.5073346')) * cos(radians( EndLat )) * cos(radians( EndLng ) - radians('-0.1276831')) + sin(radians('51.5073346')) * sin(radians( EndLat )))) AS distance FROM markers HAVING distance < 15
(因此,在上面的示例中,用户将搜索终点在坐标 51.5073346、-0.1276831 的 15 英里范围内的所有路线。如果他们想要找到起点在他们的 15 英里范围内的路线LatLng,然后 EndLat 和 EndLng 将被 StartLat 和 StartLng 替换)。
有没有人对 SQL 命令有足够的了解,能够帮助我计算出我需要的 SQL 字符串?