php - 在谷歌地图、PHP 和 MySQL 上进行附近位置搜索

标签 php mysql google-maps

我正在构建一个网络应用程序(只是为了好玩 xD),你可以告诉它你在哪里以及你想去哪里,然后你可以搜索你可能乘坐的公交车列表。

我的数据库是这样的:

buses
---------------------------------
id | bus_number | bus_description

routes
-----------------------
id | bus_id | lat | lng

路线表,正如您可能注意到的那样,存储了公共(public)汽车经过的路线点,如果找到任何搜索结果,我将用多段线显示这些点。 问题是我如何编写一些 SQL,给定这 2 个参数(用户在哪里,他想去哪里)并找到并显示正确的公交车?

我从 Google map 文档中找到了这个选择语句,它非常好(而且效果很好!),因为它可以告诉我给定的纬度/经度是否在另一个纬度/经度的半径范围内(在本例中为 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;

但是我需要这个来处理给定的 Lat/Lng 2,这样我就可以告诉用户必须在哪里乘坐公共(public)汽车,以及在哪里下车。

谢谢!!

(哦,我忘了,有一个 preview ,只是普通的 html,没有任何作用,但如果你想看看我打算如何设计这个应用程序,它很有用。顺便说一句,它是西类牙语的,在这里你进去english google translated )

更新:这是路由表中的一些示例数据:

+----+-------+------------+------------+
| 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 = -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";

结果...在 10 英里半径内最近...

enter image description here

最远但在 10 英里以内...

enter image description here

现在对 destination 重复相同的操作,然后在您的表格中搜索该路线上的巴士。 另请查看此链接... http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html

关于php - 在谷歌地图、PHP 和 MySQL 上进行附近位置搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5533140/

相关文章:

java - Spring Boot 与 MYSQL 数据库的连接失败(Web 应用程序)

android - 谷歌地图 - 位置不断在我的真实位置和 0.6 英里外(随机位置)之间跳跃

javascript - 带有 Google Places 库的 Google Maps 中不同地点类型的不同图像

php - 如何让 PHP session 在浏览器关闭或延长一段时间后过期

php - 在 Linux 上从 PHP 进行普遍的 ODBC 访问?

php - 将 Mysql 更新为 mysqli 或 pdo 的最简单方法是什么

php - Google map 的加载屏幕

php - htaccess 重写规则是否重定向到文件

PHP、MySQL。日、月、年的最小值和最大值

mysql - my.cnf.d/server.cnf 配置 - 破折号或下划线