我有大约 400 万行数据,主要是在大城市和旅游胜地收集的。我遇到的问题是我希望能够将欠采样位置中的数据与过采样位置中的数据进行比较。所以我希望能够知道每个样本周围的采样密度。为此,我想知道每个样本周围 30 公里半径内制作了多少个样本。
我计划将覆盖的区域(法国)分为两个网格,第一个网格位于偶数纬度和经度上,第二个网格位于奇数纬度和经度上,并且我向数据框中添加了列,其中为每一行放置了2个网格坐标。 目标是减少计算机进行比较的次数,它只计算同一单元格中行之间的距离。 我做了两个网格,以便一个网格中单元格边框上的样本将位于另一个网格的中间周围,因此对于每一行,最大数量实际上是周围的样本数量。 然而,我的电脑仍然无法运行它,因为它太长了。那么我应该做更薄的网格还是有更好的方法来优化这个计算?
您应该将数据放入 PostGIS 并使用
dwithin
运算符。确保向数据表添加空间索引,PostGIS 将确保它只检查附近的样本。
您最终应该得到如下查询:
SELECT t.id, COUNT(s.id)
FROM <table> AS s, <table> as t
WHERE t.id <> s.id and ST_DWithin(t.geom, s.geom, <distance>)