gpt4 book ai didi

java - MySQL选择范围内的坐标

转载 作者:可可西里 更新时间:2023-11-01 06:31:41 25 4
gpt4 key购买 nike

我的数据库中有 100 000 个地址(即记录)。

它们中的每一个都有自己的坐标(纬度和经度)。

现在,给定用户的地理位置(纬度和经度),我想在 map 上仅显示 5 英里范围内的地址(使用 Google map v3 API)。

这意味着在 100 000 个地址中通常只需要显示 5 或 6 个地址。

一种解决方案是检索所有记录并在 Java 中应用公式来计算每个地址的距离,并仅在地址位于范围内时显示它。

那会浪费处理能力,因为我需要检索所有记录,而我只需要在 map 上显示其中的 5 或 6 条记录。

如何在数据库端 (MySQL) 解决这个问题,以便只返回 5 英里范围内的地址?

最佳答案

您可以使用所谓的 Haversine formula .

$sql = "SELECT *, ( 3959 * acos( cos( radians(" . $lat . ") ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(" . $lng . ") ) + sin( radians(" . $lat . ") ) * sin( radians( lat ) ) ) ) AS distance FROM your_table HAVING distance < 5";

$lat$lng 是您点的坐标,而 lat/lng 是您的表格列。以上将列出 5 nm 范围内的位置。将 3959 替换为 6371 以更改为公里。

此链接可能有用:https://developers.google.com/maps/articles/phpsqlsearch_v3

编辑:我没看到你提到 Java。此示例使用 PHP,但查询仍然是您所需要的。

关于java - MySQL选择范围内的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21042418/

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