ST_DISTANCE_SPHERE

功能概述

按球面模型计算两个经纬度坐标之间的大圆距离,单位为米。适合计算门店与用户的距离、轨迹点之间的移动距离等,精度满足城市级别的业务分析。地球半径取 6371010 米;需要测绘级精度的场景应使用椭球模型的专业 GIS 工具。

语法

ST_DISTANCE_SPHERE(<lon1>, <lat1>, <lon2>, <lat2>)

参数说明

  • <lon1>
    <lon1>
    、
    <lat1>
    <lat1>
    :DOUBLE 类型,第一个点的经度和纬度,单位为度。

  • <lon2>
    <lon2>
    、
    <lat2>
    <lat2>
    :DOUBLE 类型,第二个点的经度和纬度,单位为度。

任一参数为 NULL 时返回 NULL。返回 DOUBLE 类型。

使用示例

计算北京两个坐标点之间的距离,保留 6 位小数:

SELECT CAST(st_distance_sphere(116.35620117, 39.939093, 116.4274406433, 39.9020987219) AS DECIMAL(20, 6)) AS meters;

meters
7336.913555

同一点距离为 0,坐标越界返回 NULL:

SELECT st_distance_sphere(0, 0, 0, 0) AS same_point, st_distance_sphere(181, 0, 0, 0) AS bad_lon, st_distance_sphere(0, 91, 0, 0) AS bad_lat;

same_pointbad_lonbad_lat
0.0NULLNULL

查找距离用户 5 公里以内的门店:

SELECT store, round(st_distance_sphere(s_lon, s_lat, 116.397128, 39.916527) / 1000, 2) AS km FROM VALUES ('王府井店', 116.410886, 39.913720), ('西单店', 116.374072, 39.913423), ('望京店', 116.481069, 39.996794) AS t(store, s_lon, s_lat) WHERE st_distance_sphere(s_lon, s_lat, 116.397128, 39.916527) <= 5000 ORDER BY km;

storekm
王府井店1.21
西单店2.0

望京店距离超过 5 公里,被过滤掉。

注意事项

  • 结果单位是米。
  • 输入坐标需与业务数据使用同一坐标系。国内地图服务(高德、腾讯等)返回的通常是 GCJ-02 坐标,GPS 设备返回的是 WGS-84 坐标,可用 ST_WGS84_TO_GCJ02 统一。

相关文档

联系我们
预约咨询
微信咨询
电话咨询
邮件咨询