Php 查找附近的邮政编码myquery优化
我需要在谷歌地图上找到附近的邮政编码, 我使用的是SQL–Haversine公式。 下面是我的问题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
$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 ");