我正在构建一个网络应用程序(只是为了好玩 xD),您可以在其中告诉它您在哪里以及您想去哪里,然后您可以搜索您可以乘坐的巴士列表。
我的数据库是这样的:
buses
---------------------------------
id | bus_number | bus_description
routes
-----------------------
id | bus_id | lat | lng
您可能会注意到,路线表存储了公交车所遵循的路线点,如果找到任何搜索结果,我将用折线显示这些点。
问题是,给定这两个参数(用户在哪里,以及他想去哪里),我如何编写一些 SQL 并找到并显示正确的公交车?
我从 Google 地图文档中找到了这个 select 语句,这很好(而且效果很好!),因为它可以告诉我给定的纬度/经度是否在另一个纬度/经度的半径内(在本例中为 25 英里):
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;
但我需要它与 2 给定的纬度/经度一起工作,这样我就可以告诉用户必须在哪里乘坐公共汽车,以及在哪里下车。
Thanks!!
(哦,我忘了,还有一个preview http://www.skydivesanjuan.com.ar/mapabondi/,只是简单的 html,没有任何作用,但如果您想看看我计划如何设计这个应用程序,那么很有用。顺便说一句,这是西班牙语,你进去吧)
更新:以下是路由表上的一些示例数据:
+----+-------+------------+------------+
| id | bus_id| lat | lng |
+----+-------+------------+------------+
| 1 | 1 | -31,527273 | -68,521408 |
| 2 | 1 | -32,890182 | -68,844048 |
| 3 | 1 | -31,527273 | -68,521408 |
| 4 | 1 | -32,890182 | -68,844048 |
| 5 | 1 | -31,527273 | -68,521408 |
| 6 | 2 | -32,890182 | -68,844048 |
| 7 | 2 | -31,527273 | -68,521408 |
| 8 | 2 | -32,890182 | -68,844048 |
| 9 | 2 | -31,527273 | -68,521408 |
| 10| 2 | -32,890182 | -68,844048 |
+----+-------+------------+------------+
只需忽略重复的 lat,lng 值即可,重点是巴士路线将有许多、数百个点来描述完整的路线。