mysql: найти ближайшую точку и ее расстояние в километрах от заданной широты и долготы? - PullRequest
0 голосов
/ 02 июля 2018

У нас есть хранимая процедура MySQL, которая принимает входные данные в виде широты и долготы. Эта хранимая процедура должна вернуть обратно 3 ближайших области к этому широте / длине и соответствующее расстояние в километрах от заданного широты / длины.

Таблица области имеет идентификатор, имя, позицию. Позиция точечного типа, имеющая POINT (широта, долгота). Я пробовал следующее решение:

SELECT
  id,
  name,
  X(position) AS 'latitude',
  Y(position) AS 'longitude',
  (
    GLength(
      LineStringFromWKB(
        LineString(
          position, 
          GeomFromText('POINT(@lat @long)')
        )
      )
    )
  )
  AS distance
FROM areas
ORDER BY distance ASC
limit 3;

Несколько проблем в приведенном выше решении:

  1. Запрос медленный. Это займет 200 миллисекунд для 22k записей. Если я уберу порядок по предложению, производительность резко улучшится, т. Е. Это займет всего 20 миллисекунд. Я создал пространственный индекс для столбца позиции, но не помог. Может кто-нибудь подсказать, как оптимизировать этот запрос?
  2. Я не уверен, как перевести это расстояние в километры?

Вот снимок экрана с описанным выше оператором select: enter image description here

...