BigQuery SQL / GIS:扩展半径直到计数大于/等于“N”
Posted
技术标签:
【中文标题】BigQuery SQL / GIS:扩展半径直到计数大于/等于“N”【英文标题】:BigQuery SQL / GIS: Extend Radius Until Count Is Greater Than / Equal To 'N' 【发布时间】:2020-09-21 19:14:38 【问题描述】:我有一个非常特殊的查询要写。在 PostGIS / BigQuery 中,我有一个 point
。我可以通过增量来缓冲这一点,并对属于这一点的唯一记录执行聚合查询,例如count(distinct())
。一旦计数达到某个阈值,我想返回地理对象的输入值,即。它的半径或直径。这个问题可以表述为“在我点击 'n' [ids] 之前,我必须继续出去多远?”。
精细地增加缓冲区或半径的值将非常缓慢且昂贵。谁能想到一个很好的方法来缩短它并提供一个快速提供很好答案的解决方案(用 BQ 或 PSQL 术语!)?
可用的 GIS 功能:
st_buffer()
st_dwithin()
谢谢!
【问题讨论】:
【参考方案1】:您必须按距离排序并保留 N 个最近的点。 <->
运算符将使用空间索引。
SELECT *
FROM pointLayer p
ORDER BY p.geometry <-> st_makePoint(...)
LIMIT 10; --N
【讨论】:
【参考方案2】:你不需要精细地增加半径——我宁愿把它加倍,或者甚至增加 10 倍,一旦你有足够多的不同记录,就取 N 个最近的记录。
我已经使用 BigQuery 脚本解决了类似的问题(N=1,但对于任何 N 都可以轻松修改,只需使用 LIMIT N
而不是 LIMIT 1
并修改停止条件):
https://medium.com/@mentin/nearest-neighbor-using-bq-scripting-373241f5b2f5
【讨论】:
以上是关于BigQuery SQL / GIS:扩展半径直到计数大于/等于“N”的主要内容,如果未能解决你的问题,请参考以下文章