mysql:找到最接近的点,它是给定纬度和经度的千米距离?

时间:2018-07-02 11:44:18

标签: mysql location gis spatial-index

我们有一个MySQL存储过程,该过程接受输入作为纬度和经度。此存储过程必须返回最接近该经度/纬度的3个区域,以及距给定经度/纬度的公里数各自的距离。

区域表具有ID,名称,位置。该位置是具有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. 查询速度很慢。 22k记录需要200毫秒。如果我删除order by子句,性能将大大提高,即仅需20毫秒。我为位置列创建了空间索引,但没有帮助。有人可以建议如何优化此查询吗?
  2. 我不确定该如何转换为公里?

以下是上述选择语句上desc的屏幕截图: enter image description here

0 个答案:

没有答案