Как реализовать запрос, основанный на диапазоне мест от х минут до хх минут времени на диске? - PullRequest
0 голосов
/ 01 ноября 2019

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

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

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

Когда пользователь хочет запросить места, как в примере выше. Я соединю таблицу мест и таблицу расстояний для запроса, например:

SELECT place.id, place.name from place join distance on place_id = place.id where distance cost_time < 30;

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

Итак, я знаю, что использовал плохой метод для реализации своей цели. Но я не знаю, как я могу это сделать, может ли кто-нибудь помочь мне с этой проблемой?

И последнее, но не менее важное: забудь мой плохой английский, если что-то неясно, я постараюсь описать это. Спасибо.

1 Ответ

0 голосов
/ 01 ноября 2019

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

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

Затем вы можете использовать алгоритм типа Dijkstra , чтобы найти все точки на расстоянии менее 30 единиц от вашего источника.

Вы потеряете некоторую точность, так какстоимость проезда от A до C, тогда C до B обычно будет больше, чем прямой путь от A до B. И время, которое вы сэкономили на добавлении новой точки, вы «потеряете» для вычисления алгоритма Дейкстры. .

...