Какой самый эффективный способ получить маршруты в таблице MySQL, которые пересекаются с данной ограничительной рамкой? - PullRequest
0 голосов
/ 01 октября 2019

У меня есть таблица MySQL, в которой хранятся маршруты. В таблице хранятся координаты NorthEast и SouthWest ограничивающего прямоугольника маршрута как тип POINT. Также он хранит 10 ключевых координат вдоль маршрута в виде полилинии Google (скорректированный алгоритм полилинии, который хранит 6-значную точность по широте / долготе, полилиния Google по умолчанию - 5 цифр).

Я бы хотел запросить эту таблицу, чтобы вернуть все маршруты, которые пересекаются с данной ограничительной областью / областью квадратной карты. Таким образом, даже если маршрут только частично (хотя бы одна из ключевых координат) находится в этой ограничивающей рамке / области карты, он должен быть возвращен как результат запроса

Чтобы сделать это максимально эффективным и быстрым, яполагал, что я сначала получаю все маршруты, для которых ограничивающий прямоугольник g1 пересекается с заданным ограничивающим прямоугольником g2, примерно так:

select * from myTable where MBRIntersects(g1, g2) = 1;

... а затем просто перебираю результаты, чтобы увидеть, хотя бы один из ключейточки на самом деле находятся в данной ограничительной рамке. (Потому что, хотя ограничивающие рамки пересекаются, не обязательно означает, что сам маршрут проходит через данную область карты). Я бы сделал этот цикл в коде сервера (PHP).

Однако я не уверен, что это самый быстрый способ. Вероятно, есть более быстрый / более эффективный способ, но не очень знакомый с функциями MySQL Spacial.

...