BigQuery中如何计算起始与终点经纬度坐标差值并生成新列
BigQuery计算经纬度坐标差值实现方案
BigQuery原生支持地理空间计算相关的内置函数,可以直接实现两点经纬度差值计算,不需要手动编写复杂的球面换算公式,具体实现方案如下:
常用方案:计算两点地表球面距离(单位:米)
绝大多数场景下经纬度差值指的是两点在地球表面的实际距离,可直接通过两个内置函数实现:
ST_GEOGPOINT(经度, 纬度):将FLOAT类型的经纬度转换为BigQuery标准地理空间类型ST_DISTANCE(地理点1, 地理点2):计算两个地理点之间的球面距离,返回值单位为米
查询计算示例代码:
SELECT starting_latitude, starting_longitude, ending_latitude, ending_longitude, ST_DISTANCE( ST_GEOGPOINT(starting_longitude, starting_latitude), ST_GEOGPOINT(ending_longitude, ending_latitude) ) AS difference FROM `你的项目ID.你的数据集名.你的表名`
如果需要把计算结果永久保存为表的第五列,可执行以下语句新增并赋值:
-- 新增difference列,类型为FLOAT64 ALTER TABLE `你的项目ID.你的数据集名.你的表名` ADD COLUMN difference FLOAT64; -- 批量给新列赋值 UPDATE `你的项目ID.你的数据集名.你的表名` SET difference = ST_DISTANCE( ST_GEOGPOINT(starting_longitude, starting_latitude), ST_GEOGPOINT(ending_longitude, ending_latitude) ) WHERE TRUE;
备选方案:计算经纬度算术欧氏差值
如果仅需要小范围平面下的经纬度算术差值,可直接通过数学函数计算:
SELECT *, SQRT( POW(ending_latitude - starting_latitude, 2) + POW(ending_longitude - starting_longitude, 2) ) AS difference FROM `你的项目ID.你的数据集名.你的表名`
注意事项
ST_GEOGPOINT的参数顺序为先经度后纬度,顺序填反会得到错误的计算结果- 若需要距离单位为公里,将
ST_DISTANCE的计算结果除以1000即可 - 若经纬度列存在空值,可搭配
SAFE.前缀或IFNULL函数避免计算报错
内容的提问来源于stack exchange,提问作者Queen B Raymond
相关产品推荐
相关产品推荐

