SQL(Presto):如何在lat/lon-pont的X英里半径内提取位置



我有很多商店都有自己的纬度和经度。我试图提取每个点半径2英里以内的数据。每个商店2英里以内有多少家商店。对此,最好的方法是什么?

我知道将纬度/经度四舍五入到十分之一(18.4,-66.2(基本上可以给我5英里的半径,但我如何才能变得更精细。我不确定四舍五入到第100位(18.4,-66.21(对我的英里数有多大影响,但半径似乎太小了。

日期存储为:

  • 商店名称(字符串(
  • 纬度(双纬度(
  • 经度(双(

您想要的是空间联接:https://prestodb.io/blog/2020/05/07/local-spatial-joins

只要将一张表与它本身连接起来,条件是两点之间的距离小于2英里,然后相加。类似这样的东西:

SELECT 
a.store_name, 
(COUNT(*) - 1) AS neighbors    -- subtract 1 for self
FROM stores a JOIN stores b
ON ST_Distance(ST_Point(a.longitude, a.latitude), 
ST_Point(b.longitude, b.latitude)) < 2 * 1609
GROUP BY a.store_name

确保你有一个相对新鲜的Presto安装,我认为Presto在2018年底左右对其进行了优化,在此之前,它将以普通交叉连接的方式运行,这太慢了。

相关内容

  • 没有找到相关文章

最新更新