@freeeeez

Как вывести маршруты из базы MySQL, которые совпадают с координатами искомого объекта?

У меня есть база маршрутов. Каждая запись имеет пункт отправления, пункт назначения и их координаты lat lon. Необходимо вывести маршруты, которые пролегают через координаты искомой точки.

Допустим ищем Тверь (56.8, 35.9) и из базы должны быть выведены маршруты:
- Москва(55.7, 37.6) - Питер (59.9, 30.3)
- Клин (56.3, 36.7) - Торжок (57.0, 35.0)
, так как они проходят через Тверь.

У меня есть массив точек каждого маршрута полученный из Google.Maps. Я не знаю как его вставить в БД: в отдельную таблицу или в виде JSON в дополнительное поле к маршруту. Как потом искать среди массива точек искомую точку? Как искать на определенном удалении от точки допустим (10км) я представляю, а как сопоставить попадает ли она в пределы маршрута нет. Кто нибудь сталкивался с такой задачей?
  • Вопрос задан
  • 58 просмотров
Решения вопроса 1
@freeeeez Автор вопроса
Комментировать
Пригласить эксперта
Ответы на вопрос 2
dimonchik2013
@dimonchik2013
non progredi est regredi
такое проще графовой базой решать

ну или https://dev.mysql.com/doc/refman/8.0/en/spatial-ty...
Ответ написан
@rPman
Для того чтобы сравнивать данные, вам нужно привести их к общему виду.

В вашем случае это не точки а связный двунаправленный граф, где вершины - города, а ветви - дороги. Соответственно вы ваши загружаемые точки должны привести к этому же вижу - подграфу, сначала поиском точек (вычисляя расстояние между искомой точкой и точкой города, определив минимальное).

Если это критично, так же можете попытаться искать попадание точек на дороги (но это в общем случае невозможно, дороги ведь в реальности не прямые, а в базе у вас только точки городов).

И само собой, точки в вашем запросе как то должны быть связаны, направление движения или хотя бы через ближайшие, чтобы вы могли различать из какого города и куда вы двигаетесь.

получив граф, вы легко определите, совпадает ли он с подграфом из базы, и конечно продумайте как будете разруливать ситуации, когда точек в базе нет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы