Я создаю веб-приложение (просто для удовольствия xD), в котором вы можете указать, где вы находитесь и куда вы хотите отправиться, а затем вы можете найти список автобусов, на которые вы можете сесть.
Мой БД примерно такой:
buses
---------------------------------
id | bus_number | bus_description
routes
-----------------------
id | bus_id | lat | lng
В таблице маршрутов
, как вы можете заметить, хранятся точки маршрута, по которым следует автобус, точки, которые я буду отображать с помощью полилинии, если будут найдены какие-либо результаты поиска.
Вопрос в том, как мне написать какой-нибудь SQL, учитывая эти 2 параметра (где пользователь и куда он хочет пойти), найти и показать правильные шины?
Я нашел это утверждение select из документов Google Maps, которое приятно (и прекрасно работает!), Потому что оно может сказать мне, находится ли данный 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;
Но мне нужно, чтобы это работало с 2 данными широты / долготы, чтобы я мог сказать, где пользователь должен сесть на автобус и где спуститься.
Спасибо !!
(О, я забыл, есть предварительный просмотр , просто обычный HTML и ничего не работает, но полезно, если вы хотите посмотреть, как я планирую, чтобы это приложение выглядело. Кстати, оно на испанском, здесь вы идете в английский перевод Google )
Обновление: Вот некоторые примеры данных в таблице маршрутов:
+----+-------+------------+------------+
| 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, дело в том, что у автобусного маршрута будет много, сотни точек для описания всего маршрута.