gpt4 book ai didi

SQL统一分配点数

转载 作者:太空狗 更新时间:2023-10-30 01:51:43 26 4
gpt4 key购买 nike

我有一张带有地理定位点的长 table :

id      lat           lon      
-----------------------
1 39.4600 110.3523410
2 39.4601 110.3523410
3 39.4605 110.3523410
4 39.4609 110.3523410

其中许多点在 map 上显示时会重叠,因为它们非常接近。如何获得均匀的点数分配?也就是说,它们之间的距离大于给定点的一组点。

例如,点 1 和点 2 之间的距离(纬度)为 0.0001。我能否获得仅包含相隔大于 0.0003(或任何其他数量)的点的表格结果?

使用地理空间数据库可能很容易,但使用普通 SQL 似乎不是一项显而易见的任务(至少对我而言)。

谢谢,哈维尔

最佳答案

(粗略地)最快的方法是将每个点分配给一个网格正方形,然后每个正方形只保留一个点。这比列出的其他技术更有效:

SELECT DISTINCT ROUND(lat*250, 0), ROUND(long*250, 0) FROM sometable;

您可能想要平均每个网格正方形中的位置:

SELECT AVERAGE(lat), AVERAGE(long)
FROM sometable
GROUP BY ROUND(lat*250, 0), ROUND(long*250.0, 0);

要控制分组的粒度,只需将比例因子从 250 向上或向下更改即可。

另一种(且较慢)的方法是执行 CROSS JOIN这样每个点都与其他点配对,然后使用 distance formula标记低于最低阈值的对。如果距离公式感觉太复杂,更简单的方法是将连接限制在 ABS(a.long - b.long) < 0.1 AND ABS(a.lat - b.lat) < 0.1 的位置。 .这将确定靠在一起的点。

请注意,交叉连接是一个复杂度为 O(n**2) 的操作,因此如果您尝试将此方法扩展到多个点,可能会出现问题。解决方案是将这些点预先分组到更小的区域中,然后仅对该区域中的点运行交叉连接。

如果您可以在 SQL 之外进行任何工作,使用 clustering algorithm 可能更合适.

关于SQL统一分配点数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8065388/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com