问题描述
说我在一张桌子的一行中有两个邮政编码。有没有办法计算两个邮政编码之间的距离?
解决方法
以下示例适用于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 ...
上面的结果将显示如下,显示拉链和代表它们之间最短线的线
注意:显然,这不是行驶距离,而是地图上的最短距离-有关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;