mysql:找到最近的点,它距离给定的纬度和经度以公里为单位的距离?

nfeuvbwi  于 2021-06-20  发布在  Mysql
关注(0)|答案(0)|浏览(280)

我们有一个mysql存储过程,它接受纬度和经度的输入。此存储过程必须返回距离此lat/long最近的3个区域以及距离给定lat/long的相应距离(以公里为单位)。
区域表具有id、名称和位置。位置为点类型,具有点(纬度、经度)。我尝试了以下解决方案:

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;

上述解决方案中的几个问题:
查询速度慢。22k记录需要200毫秒。如果我删除ORDERBY子句,性能会显著提高,即只需20毫秒。我已经为position列创建了空间索引,但没有帮助。有人能建议如何优化这个查询吗?
我不知道如何把这个距离换算成公里?
以下是上述select语句的desc屏幕截图:

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题