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

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

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

  1. SELECT
  2. id,
  3. name,
  4. X(position) AS 'latitude',
  5. Y(position) AS 'longitude',
  6. (
  7. GLength(
  8. LineStringFromWKB(
  9. LineString(
  10. position,
  11. GeomFromText('POINT(@lat @long)')
  12. )
  13. )
  14. )
  15. )
  16. AS distance
  17. FROM areas
  18. ORDER BY distance ASC
  19. limit 3;

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

暂无答案!

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

相关问题