PHP/MySQL : Select locations close to a given location from DB

标签 php mysql geolocation distance geography

在 PHP 中,我有以下代码用于计算两个位置之间的距离:

<?php
function distance($lat1, $long1, $lat2, $long2) {
    // DEGREE TO RADIAN
    $latitude1 = $lat1/180*pi();
    $longitude1 = $long1/180*pi();
    $latitude2 = $lat2/180*pi();
    $longitude2 = $long2/180*pi();
    // FORMULA: e = ARCCOS ( SIN(Latitude1) * SIN(Latitude2) + COS(Latitude1) * COS(Latitude2) * COS(Longitude2-Longitude1) ) * EARTH_RADIUS
    $distance = acos(sin($latitude1)*sin($latitude2)+cos($latitude1)*cos($latitude2)*cos($longitude2-$longitude1))*6371;
    return $distance;
}
echo distance(9.9921962, 53.5534074, 9.1807688, 48.7771056); // Hamburg, DE - Stuttgart, DE
?>

但是现在,我想通过 PHP 从我的 MySQL 数据库中选择靠近给定位置的位置:

  • 用户输入家乡
  • 我的脚本通过 Google API 获取纬度/经度值
  • 在我的数据库中,我有大约 200 个位置,其中有一个纬度值字段和一个经度值字段
  • 我需要一个 PHP 和 MySQL 代码来选择离用户家乡最近的 10 个位置

我希望你能帮助我。提前致谢!

最佳答案

MySQL Great Circle Distance (Haversine formula)完全满足您的需求。

虽然只有 200 条记录,但您也可以将它们全部加载并用代码检查它们。数据集真的太小了,不用担心数据库与代码或任何其他此类优化。

Calculating distance between zip codes in PHP有几个此算法的 PHP 实现。

Geo Proximity Search与您遇到的问题几乎完全相同。

关于PHP/MySQL : Select locations close to a given location from DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/894713/

相关文章:

Android 区域设置 getcountry 错误

windows-phone-8 - 如何将经纬度值转换为Windows Phone中的地址?

javascript - 地理定位 API 在某些 Android 设备上不起作用

php - 我应该如何将这些表加入MySQL?

php - MySQL 从表 WHERE 值> 0 中选择行

mysql - 同时生成成员(member)号时ID重复

python - 唯一列上的重复 unicode 输入错误 - mysql

php - 构建快速重定向服务器

php - 在 protected 目录中将 Securimage 与 secureimage_show.php 一起使用

php - 如何向用户发送账户充值通知,PHP+MySQL