ric*_*res 3 php mysql google-maps
我正在建立一个网络应用程序(只是为了有趣的xD),你可以告诉它你在哪里以及你想去哪里,然后你可以搜索你可能会采取的公共汽车列表.
我的数据库是这样的:
buses
---------------------------------
id | bus_number | bus_description
routes
-----------------------
id | bus_id | lat | lng
Run Code Online (Sandbox Code Playgroud)
您可能会注意到,路线表存储了公交车所遵循的路线点,如果找到任何搜索结果,我将使用折线显示点.问题是我如何编写一些SQL,给出这两个参数(用户在哪里,他想去哪里)并找到并显示正确的总线?
我从谷歌地图文档中找到了这个选择语句,这很好(并且效果很好!)因为它可以告诉我一个给定的Lat/Lng是否在另一个的半径(在这种情况下是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;
Run Code Online (Sandbox Code Playgroud)
但是我需要这个才能使用2个给定的Lat/Lng,所以我可以告诉用户必须在哪里乘坐公共汽车,以及在哪里下车.
谢谢!!
(哦,我忘了,有一个预览,只是简单的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 |
+----+-------+------------+------------+
Run Code Online (Sandbox Code Playgroud)
只要忽略重复的lat,lng值,重点是一条公交线路将有很多,数百个点来描述完整的路线.
好的,让我们开始吧,使用下面的查询,您可以在特定半径(英里)内获得最近的公交车站.查询将返回定义半径内的每个点.
$lat = -31,52;
$lon = -68,52;
$multiplier = 112.12; // use 69.0467669 if you want miles
$distance = 10; // kilometers or miles if 69.0467669
$query = "SELECT *, (SQRT(POW((lat - $lat), 2) + POW((lng - $lng), 2)) * $multiplier) AS distance FROM routes WHERE POW((lat - $lat), 2) + POW((lng - $lng), 2) < POW(($distance / $multiplier), 2) ORDER BY distance ASC";
Run Code Online (Sandbox Code Playgroud)
结果......离半径10英里最近......
最远但在10英里内......
现在重复相同的操作destination
,然后在表格中搜索该路线上的公交车.另请查看此链接... http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html