计算BigQuery SQL中两个邮政编码之间的距离以英里为单位?

问题描述

说我在一张桌子的一行中有两个邮政编码。有没有办法计算两个邮政编码之间的距离?

解决方法

以下示例适用于BigQuery标准SQL

#standardSQL
WITH `project.dataset.tabel` AS (
  SELECT '91356' home,'90045' work
)
SELECT home,work,ST_DISTANCE(home_geo,work_geo) / 1609.34 AS distance,home_geo,work_geo,ST_MAKELINE(ST_CLOSESTPOINT(home_geo,work_geo),ST_CLOSESTPOINT(work_geo,home_geo)) line
FROM (
  SELECT home,(
    SELECT ST_GEOGFROMTEXT(zipcode_geom) 
    FROM `bigquery-public-data.utility_us.zipcode_area`
    WHERE zipcode = home
    ) home_geo,(
    SELECT ST_GEOGFROMTEXT(zipcode_geom) 
    FROM `bigquery-public-data.utility_us.zipcode_area`
    WHERE zipcode = work
    ) work_geo
  FROM `project.dataset.tabel`
)   

有输出

home    work    distance            ...
91356   90045   12.794149725735204  ... 

enter image description here

上面的结果将显示如下,显示拉链和代表它们之间最短线的线

enter image description here

注意:显然,这不是行驶距离,而是地图上的最短距离-有关ST_DISTANCE的更多详细信息

,

您可以尝试以下方法:

SELECT
  zip1.zipcode zipcode1,zip2.zipcode zipcode2,ST_DISTANCE(zip1.geog,zip2.geog) distance
FROM
  `fh-bigquery.gis.zipcodes` zip1,`fh-bigquery.gis.zipcodes` zip2
WHERE
  zip1.zipcode != zip2.zipcode;