gpt4 book ai didi

结果均匀分布的 MySQL Lat/Lng Boundary

转载 作者:行者123 更新时间:2023-11-29 03:14:20 25 4
gpt4 key购买 nike

在 map 应用程序中,我使用类似于以下的查询根据可见 map 区域在 map 上显示标记。

SELECT * FROM (`properties`) 
WHERE `lat` > '-11.824448' AND `lat` < '84.124002' AND
`lng` > '-152.243398' AND `lng` < '-39.743398'
LIMIT 20;

由于表格中的索引,这导致结果通常出现在同一纬度上并出现在 map 角落的一条线上。 map 的其余部分是空的。

由于服务器负载、带宽和加载时间的原因,我无法在 map 上显示所有结果,有什么方法可以拉回整个 map 区域的结果吗?

我想我可以通过计算出 x 的比例距离并告诉 mysql 返回结果,其中没有结果在另一个结果的 x 距离内。

其他人是怎么做到的?

最佳答案

如果您将拥有数千个属性,您可能需要考虑在数据库中对属性进行集群。也就是说,通过定义每个属性应显示在哪个缩放级别,您可以将这些点聚类以减少一次显示的数量。

一种方法是使用另一个表,可以将其称为 properties_clusters,其中包含以下字段:latlng number_of_pointszoom_level。确保 zoom_level 字段也被可用索引覆盖。

每当您插入或移动属性时,您还应该更新 properties_clusters 表。您可能想研究一下可能的聚类算法,但如果准确性不是那么重要,您可能会想出一个简单的解决方案,例如为每个缩放级别将世界分割为多个图 block ,然后简单地进行聚类.

然后,只要 map 的可见区域或缩放级别发生变化,您就可以从 properties_clusters 表中请求数据,缩放级别越低,它将返回的点数越少:

SELECT * FROM (`properties_clusters`) 
WHERE `lat` > '-11.824448' AND `lat` < '84.124002' AND
`lng` > '-152.243398' AND `lng` < '-39.743398' AND
`zoom_level` = 5

您可以定义一个缩放级别阈值,从这里您将直接显示来自 properties 表的结果。此阈值通常设置为可以与 map 上的标记交互(点击它们等)的缩放级别。

关于结果均匀分布的 MySQL Lat/Lng Boundary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3126582/

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