2

我正在建立一个本地点的数据库,这些本地点中的每一个都存储在我的 mysql 数据库中,并带有经纬度坐标集。

我想建立一个用户在表单中输入他的位置的搜索,我的表单将通过谷歌地图地理定位 API 成功确定用户的纬度和经度。

我的问题/问题是这个。如何确定我的 mysql 数据库中项目的哪些纬度和经度集在预定半径内(比如 25 英里)。

有没有办法计算 25 英里半径范围内的纬度和经度的外部边界,然后使用基本的 mysql 选择检查与 # 匹配的项目?如果是这样,英里和纬度/经度之间的转换是什么?如果没有,还有其他方法可以解决任何人能想到的吗?

谢谢!!

4

2 回答 2

2

几乎与@Skidrow 之前写的一样,但在 php.ini 中。如果您想检查已经加载的结果,PHP 可能会更好,否则您必须迭代 mysql 中的所有帖子。如果那样的话mysql版本会更好

function calculateDistance($targetLat, $targetLng, $againstLat, $againstLng, $units = 'miles')
{
    $result = 3958.75 * acos(
        sin($targetLat / 57.2958) * sin($againstLat / 57.2958) +
            cos($targetLat / 57.2958) * cos($againstLat / 57.2958) *
                cos($againstLng / 57.2958 - $targetLng / 57.2958)
    );

    switch ($units)
    {
        default:
        case "":
        case "miles":
            $result *= 1;
            break;
    }

    return $result;
}

使用此功能进行测试

$target* = 数据库中的位置

$against* = 用户位置

于 2012-11-18T01:22:53.563 回答
1

有很多方法。您可以使用空间索引或 harvesine 公式。您还可以创建邻近搜索。在这里阅读:https ://developers.google.com/maps/articles/geospatial 。harvesine 公式是球体上两点之间的大圆距离。

于 2012-11-17T23:00:49.847 回答