BigQuery 上的地理哈希的地理空间滚动平均值

问题描述 投票:0回答:1

Geohashes 形成一个网格,很像矩阵。

如果我有一个包含 geohash7 和一个值的表,我如何计算 BigQuery 上所有相邻单元格的平均值?

示例源表

geohash7 价值
r1q6fh3 7
r1q6fh6 2
r1q6fh7 5
r1q6fh1 7
r1q6fh4 2
r1q6fh5 6
r1q6f5c 4
r1q6f5f 2
r1q6f5g 7

样本输出表

geohash7 价值
r1q6fh4 4.6
... ...

理想情况下以可扩展的方式进行,因为我想在大片陆地上运行它。

google-bigquery postgis geohashing
1个回答
0
投票

首先,您需要一个返回邻居的函数。获取一个 javascript geohash 库并将其用作 UDF 可能更容易,而不是在 SQL 中进行一些摆弄。

一旦你有一个返回邻居的函数,比如说

GeoHashNeibors(center STRING) RETURNS ARRAY<STRING>

然后您可以将原始表与扁平化的邻居列表连接起来并计算平均值。有点像

WITH with_neighbors AS (
  select geohash, value, neighbor
  from data d, unnest(GeoHashNeibors(d.geohash)) neighbor
),
joined AS (
  select t1.geohash, t1.value, t1.neighbor, t2.value as n_value
  from with_neighbors t1 left join data t2
  on t1.neighbor = t2.geohash
)
SELECT geohash, ANY_VALUE(value) value, AVG(n_value) AS avg_neighbor
FROM joined 
GROUP BY 1
© www.soinside.com 2019 - 2024. All rights reserved.