我有很多商店都有自己的纬度和经度。我试图提取每个点半径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年底左右对其进行了优化,在此之前,它将以普通交叉连接的方式运行,这太慢了。