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

如何在BigQuery中计算多组经纬度数据点的质心?

在BigQuery中按ID聚合经纬度计算质心

问题背景

有包含多组经纬度的数据集,需要按ID分组计算每组的质心(球面坐标的平均位置)。注意:直接对经纬度取平均值会导致误差,因为经纬度是球面坐标系的角度值,正确做法是先转换为三维笛卡尔坐标计算平均,再转回经纬度。

示例数据

IDLONGLAT
101-71.2340342.01979
101-91.46962144.867211
10278.895271638.4022661
10280.851866835.3152386

解决方案:BigQuery SQL查询

WITH cartesian_coords AS (
  SELECT
    ID,
    COS(RADIANS(LAT)) * COS(RADIANS(LONG)) AS x,
    COS(RADIANS(LAT)) * SIN(RADIANS(LONG)) AS y,
    SIN(RADIANS(LAT)) AS z
  FROM
    `your-project.your-dataset.your-table`
)
SELECT
  ID,
  DEGREES(ATAN2(AVG(y), AVG(x))) AS CENTROID_LONG,
  DEGREES(ACOS(AVG(z) / SQRT(POWER(AVG(x), 2) + POWER(AVG(y), 2) + POWER(AVG(z), 2)))) AS CENTROID_LAT
FROM
  cartesian_coords
GROUP BY
  ID
ORDER BY
  ID;

代码说明

  1. 笛卡尔坐标转换:将经纬度转为弧度后,计算每个点的三维笛卡尔坐标(x,y,z),适配球面坐标系的计算规则。
  2. 聚合计算:按ID分组,对x、y、z坐标分别取平均值,得到组内的平均三维坐标。
  3. 转回经纬度:用ATAN2推导经度,ACOS推导纬度,再通过DEGREES将弧度转回角度值,得到最终质心坐标。

正确计算后的示例输出

IDCENTROID_LONGCENTROID_LAT
101-81.3708943.46305
10279.8751436.86041

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:30:51