比较 Table A 中每组坐标与 Table B 中所有坐标之间的距离,仅保留 X 距离内的坐标
Compare distance between each set of coordinates in Table A with all coordinates in Table B, keeping only those within X distance
我有两个 Lat/Long 坐标表(Table A 大约有 10,000 行,Table B 大约有 100,000 行),我正在努力计算 [=] 之间的成对距离=22=]A和B.
我想做的是从 Table A 中获取每一组单独的坐标,并将其与 Table B 中的每一组坐标进行比较,并计算坐标的数量来自 Table B,两者之间的距离小于 X 英里或公里。我想对 Table A 中的 10,000 个坐标中的每一个都执行此操作。我什至很难开始这样做。
我尝试了以下几种不同的变体:
SELECT ST_DISTANCE(
ST_GEOGPOINT(Table_A_Long, Table_A_Lat),
ST_GEOGPOINT(Table_B_Long, Table_B_Lat)
) AS Distance
但这是我所能得到的。任何将我推向正确方向的信息都将受到赞赏。
请参阅下面的绝对虚拟但希望足够简单的示例,让您获得高层次的想法
它的作用是模仿您的两个表格,并为每个州 10 个距离州内点小于 100 公里的城市进行您想要的比较
注意:因为在下面的 public 表中经纬度显示为字符串 - 我不得不将它们转换为 float64
with table1 as (
select state_name, ST_GEOGPOINT(
cast(internal_point_lon as float64),
cast(internal_point_lat as float64)
) table1_point
from `bigquery-public-data.utility_us.us_states_area`
), table2 as (
select name, ST_GEOGPOINT(
cast(int_point_lon as float64),
cast(int_point_lat as float64)
) table2_point
from `bigquery-public-data.utility_us.us_cities_area`
)
select state_name,
ARRAY_AGG(name order by ST_DISTANCE(table1_point, table2_point) limit 10) cities
from table1
cross join table2
where ST_DISTANCE(table1_point, table2_point) < 100000
group by state_name
有输出
使用相同的 CTE,但保留地理数据以便可视化
select
state_name,
any_value(table1_point) as state,
ST_UNION_AGG(table2_point) cities
from table1
cross join table2
where ST_DISTANCE(table1_point, table2_point) < 100000
group by state_name
下面是结果可视化的几个例子
明尼苏达
格鲁吉亚
华盛顿
我有两个 Lat/Long 坐标表(Table A 大约有 10,000 行,Table B 大约有 100,000 行),我正在努力计算 [=] 之间的成对距离=22=]A和B.
我想做的是从 Table A 中获取每一组单独的坐标,并将其与 Table B 中的每一组坐标进行比较,并计算坐标的数量来自 Table B,两者之间的距离小于 X 英里或公里。我想对 Table A 中的 10,000 个坐标中的每一个都执行此操作。我什至很难开始这样做。
我尝试了以下几种不同的变体:
SELECT ST_DISTANCE(
ST_GEOGPOINT(Table_A_Long, Table_A_Lat),
ST_GEOGPOINT(Table_B_Long, Table_B_Lat)
) AS Distance
但这是我所能得到的。任何将我推向正确方向的信息都将受到赞赏。
请参阅下面的绝对虚拟但希望足够简单的示例,让您获得高层次的想法
它的作用是模仿您的两个表格,并为每个州 10 个距离州内点小于 100 公里的城市进行您想要的比较
注意:因为在下面的 public 表中经纬度显示为字符串 - 我不得不将它们转换为 float64
with table1 as (
select state_name, ST_GEOGPOINT(
cast(internal_point_lon as float64),
cast(internal_point_lat as float64)
) table1_point
from `bigquery-public-data.utility_us.us_states_area`
), table2 as (
select name, ST_GEOGPOINT(
cast(int_point_lon as float64),
cast(int_point_lat as float64)
) table2_point
from `bigquery-public-data.utility_us.us_cities_area`
)
select state_name,
ARRAY_AGG(name order by ST_DISTANCE(table1_point, table2_point) limit 10) cities
from table1
cross join table2
where ST_DISTANCE(table1_point, table2_point) < 100000
group by state_name
有输出
使用相同的 CTE,但保留地理数据以便可视化
select
state_name,
any_value(table1_point) as state,
ST_UNION_AGG(table2_point) cities
from table1
cross join table2
where ST_DISTANCE(table1_point, table2_point) < 100000
group by state_name
下面是结果可视化的几个例子
明尼苏达
格鲁吉亚
华盛顿