当前位置: 首页 > 面试题库 >

SQL如何按照指定经纬度查询用户周围的业务员并且按照距离排序?

解阳泽
2023-05-05

按经纬度搜索,并按距离排序的简单实现,这样的问题应该很多朋友碰到过,我把自己的方案写出来供大家参考。

这是一种简单的实现,数据量不大的情况下还是能满足需求的,写在这里做一份记录。当然也希望有其他更好的方案。

主要思路就是:先以指定的经纬度为中心,计算一定半径内的方形经纬度边界,然后用此方形经纬度边界过滤,并使用一个计算两点经纬度之间距离的自定义数据库函数计算距离,然后按计算得到的距离倒序。

数据库是这样的:

业务员表-实时位置字段

Sql-更新

update 表名 set real_time_position=GeomFromText('POINT(187.07 36.45)') where id='1000006'


Mybatis-更新or插入

update
      financial_service_salesman
set
      receipt_flag = #{receiptFlag}
     ,real_time_position = GeomFromText('POINT(${realTimePosition})')
     ,position_update_time = #{positionUpdateTime}
where
      user_id = #{userId}


* GeomFromText('POINT(${realTimePosition})')

Mybatis-查询

需求:查询出所有业务员根据业务员位置和用户位置计算距离进而排序

select
    id,
    user_name,
    (
		st_distance (
			fss.real_time_position, <!-- 业务员位置经纬度 -->
			point (#{longitude}, #{latitude}) <!-- 用户位置经(longitude)纬(latitude)度 -->
		)
	)*111.195 AS distance <!-- distance 距离、米数 -->
from 
    financial_service_salesman as fss
where del_flag = '0'
order by distance


MyBatis查询经纬度字段值

ASText(fss.real_time_position)

返回业务员列表

前端或后台将取的米数转换。

 类似资料:
  • 问题内容: 我有一个具有这样的结构的表: 我想计算给定坐标与数据库中保存的坐标之间的距离。 我当前的查询: 再加上一些的数据。 有什么方法可以优化该查询?进行连接大约需要13毫秒。 我还需要在此处添加一些以及用于分页的商店总数。 问题答案: 这里有一些想法,根据您的实际情况,其中一些想法可能不适用。 您可以将纬度和经度转换为弧度,并将其存储在行中。这将节省这些计算的成本(实际上,在存储数据时,成本

  • 已知字母序列【d, g, e, c, f, b, o, a】,请实现一个函数针对输入的一组字符串 input[] = {“bed”, “dog”, “dear”, “eye”},按照字母顺序排序并打印,结果应为:dear, dog, eye, bed。 说明 本问题在网上比较常见,但这里尝试用另外一个思路,并且用python来写,与众多用c++的有所不同,且似乎短小了不少。自己感觉比网上参考到的更

  • 本文向大家介绍laravel 模型查询按照whereIn排序的示例,包括了laravel 模型查询按照whereIn排序的示例的使用技巧和注意事项,需要的朋友参考一下 实例如下所示: 中午没睡觉一直调试,心塞... 错误写法 原因解析 以上这篇laravel 模型查询按照whereIn排序的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 问题内容: 我有以下模型: 我应如何查询以距离排序(距离为无穷大)? 如果需要,可以在PosgreSQL,GeoDjango上工作。 问题答案: 首先,最好使一个点字段而不是使lat和lnt分开: 然后,你可以像这样过滤它:

  • 本文向大家介绍在sql中不指定Order by排序是按照主键吗,包括了在sql中不指定Order by排序是按照主键吗的使用技巧和注意事项,需要的朋友参考一下 在sql中不指定Order by,排序是按照主键吗?答案是不一定。举个例子: 查询AttendanceEmpRank表,主键是AttendanceEmployeeRankId,而且是聚集索引 执行下面的语句,发现第一句不指定Order by

  • 我正在尝试一个mysql查询来根据距离排序帖子,比如说在半径250英里内,所有的工作都很好,除了我需要以一种方式排序帖子,特色帖子总是在顶部。这是我的mysql查询(我正在wordpress上做)。 问题是ORDER BY,它给我的错误是“Subquery returns多于1行” 如果删除ORDER BY(从wp_postmeta中选择wp_postmeta.meta_value,wp_post