You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于经纬度的1公里范围内客户数据检索问题(Redash环境)

以指定用户经纬度为中心查询1公里范围内的客户数据

首先检查数据表中lat字段的数值格式——示例里的25,000应该是小数点.而非逗号,, 格式错误会导致距离计算失效,请先修正数据格式。

以下是针对不同数据库的SQL查询方案,替换your_table_name为你的实际表名:

PostgreSQL(带PostGIS扩展)

PostGIS提供原生地理空间函数,计算效率更高:

WITH center_point AS (
    SELECT ST_SetSRID(ST_MakePoint(long, lat), 4326) AS center_geom
    FROM your_table_name
    WHERE user_id = 1
)
SELECT t.user_id, t.long, t.lat
FROM your_table_name t, center_point cp
-- ST_DistanceSphere返回单位为米,1000米=1公里
WHERE ST_DistanceSphere(t.long, t.lat, ST_X(cp.center_geom), ST_Y(cp.center_geom)) <= 1000;

MySQL/MariaDB

使用Haversine公式计算球面距离:

-- 先获取user_id=1的经纬度作为中心点
SET @center_long = (SELECT `long` FROM your_table_name WHERE user_id = 1);
SET @center_lat = (SELECT lat FROM your_table_name WHERE user_id = 1);

-- 筛选1公里内的用户,同时返回距离值
SELECT 
    user_id, 
    `long`, 
    lat,
    -- 6371为地球平均半径(公里),计算结果单位为公里
    6371 * 2 * ASIN(SQRT(
        POWER(SIN((@center_lat - lat) * PI()/180 / 2), 2) +
        COS(@center_lat * PI()/180) * COS(lat * PI()/180) *
        POWER(SIN((@center_long - `long`) * PI()/180 / 2), 2)
    )) AS distance_km
FROM your_table_name
WHERE distance_km <= 1
ORDER BY distance_km;

说明

  • 若使用其他数据库(如BigQuery),核心逻辑一致:先获取中心点经纬度,再通过地理函数或公式计算距离并筛选。
  • 注意long是SQL关键字,在MySQL中需要用反引号`包裹避免语法错误。

内容的提问来源于stack exchange,提问作者Nanosa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:25:20