Php 查找附近的邮政编码myquery优化

Php 查找附近的邮政编码myquery优化,php,mysql,google-maps,Php,Mysql,Google Maps,我需要在谷歌地图上找到附近的邮政编码, 我使用的是SQL–Haversine公式。 下面是我的问题 $query = $this->db->query("SELECT Postcode,latitude,longtitude, ACOS(COS(RADIANS(latitude)) * COS(RADIANS(longtitude)) * COS(RADIANS($latitude)) * COS(RADIANS($longtitude)) + COS(RADIAN

我需要在谷歌地图上找到附近的邮政编码, 我使用的是SQL–Haversine公式。 下面是我的问题

 $query = $this->db->query("SELECT Postcode,latitude,longtitude, ACOS(COS(RADIANS(latitude)) *
    COS(RADIANS(longtitude)) * COS(RADIANS($latitude)) * COS(RADIANS($longtitude)) +
    COS(RADIANS(latitude)) * SIN(RADIANS(longtitude)) * COS(RADIANS($latitude)) * 
    SIN(RADIANS($longtitude)) + SIN(RADIANS(latitude)) * SIN(RADIANS($latitude))) * 
    3963.1 AS Distance
    FROM postalscheme   
    HAVING Distance <= 4  "); 
$query=$this->db->query(“选择邮政编码、纬度、经度、ACOS(弧度(纬度))*
COS(弧度(经度))*COS(弧度($纬度))*COS(弧度($经度))+
COS(弧度(纬度))*SIN(弧度(经度))*COS(弧度($纬度))*
SIN(弧度($经度))+SIN(弧度(纬度))*SIN(弧度($纬度))*
3963.1作为距离
来自postalscheme

使用距离将纬度/经度值限制在附近时,可以限制必须计算距离的数据范围。 (公式来自 当你按英里计算时,这是有效的……否则你必须用正确的公里值调整“69”

1° of latitude ~= 69 miles 
1° of longitude ~= cos(latitude)*69
当您想要计算较小矩形的经度和纬度时,您可以使用(与上面的变量一起):

然后修改查询,如下所示:

$query = $this->db->query("SELECT Postcode,latitude,longtitude, ACOS(COS(RADIANS(latitude)) *
    COS(RADIANS(longtitude)) * COS(RADIANS($latitude)) * COS(RADIANS($longtitude)) +
    COS(RADIANS(latitude)) * SIN(RADIANS(longtitude)) * COS(RADIANS($latitude)) * 
    SIN(RADIANS($longtitude)) + SIN(RADIANS(latitude)) * SIN(RADIANS($latitude))) * 
    3963.1 AS Distance
    FROM postalscheme   
    WHERE longitude BETWEEN $lon1 AND $lon2 
    AND latitude BETWEEN $lat1 AND $lat2
    HAVING Distance <= $dist  ");
$query=$this->db->query(“选择邮政编码、纬度、经度、ACOS(弧度(纬度))*
COS(弧度(经度))*COS(弧度($纬度))*COS(弧度($经度))+
COS(弧度(纬度))*SIN(弧度(经度))*COS(弧度($纬度))*
SIN(弧度($经度))+SIN(弧度(纬度))*SIN(弧度($纬度))*
3963.1作为距离
来自postalscheme
其中经度介于$lon1和$lon2之间
纬度在$lat1和$lat2之间

有距离你的数据库中有多少行位置数据?大约20行缺少英国的邮政编码你能从下面试试我的解决方案吗?
$query = $this->db->query("SELECT Postcode,latitude,longtitude, ACOS(COS(RADIANS(latitude)) *
    COS(RADIANS(longtitude)) * COS(RADIANS($latitude)) * COS(RADIANS($longtitude)) +
    COS(RADIANS(latitude)) * SIN(RADIANS(longtitude)) * COS(RADIANS($latitude)) * 
    SIN(RADIANS($longtitude)) + SIN(RADIANS(latitude)) * SIN(RADIANS($latitude))) * 
    3963.1 AS Distance
    FROM postalscheme   
    WHERE longitude BETWEEN $lon1 AND $lon2 
    AND latitude BETWEEN $lat1 AND $lat2
    HAVING Distance <= $dist  ");