加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

PHP-按邮政编码/经度/纬度选择功效

发布时间:2021-01-18 19:19:49 所属栏目:编程 来源:网络整理
导读:我有3张桌子: 1包括要查找其都市的人(来自其他表)以及要在个中找到的范畴(整数,1-20)(以英里为单元) 1包括都市和邮政编码的开头(即BB2) 1包括都市及其经度/纬度 我想做的是按照或人输入的邮政编码选择职员.假云云邮政编码是针对其范畴内的都市,则应从数据库

我有3张桌子:
1包括要查找其都市的人(来自其他表)以及要在个中找到的范畴(整数,1-20)(以英里为单元)
1包括都市和邮政编码的开头(即BB2)
1包括都市及其经度/纬度

我想做的是按照或人输入的邮政编码选择职员.假云云邮政编码是针对其范畴内的都市,则应从数据库中选择此人.

我有这个PHP代码:

  // Latitude calculation
  $limit = (1 / 69.1703234283616) * $radius;
  $latitude_min = $latitude - $limit;
  $latitude_max = $latitude + $limit;

  // Longitude calculation
  $limit = (1 / (69.1703234283616 * cos($userLat * (pi/180)))) * $radius;
  $longitude_min = $longitude - $limit;
  $longitude_max = $longitude + $limit;

此刻这是坚苦的部门.我不知道怎样从数据库中选择职员,这取决于输入的邮政编码及其范畴.

有人可以帮我一下吗?

最佳谜底 这是我前一段时刻为MySQL建设的存储函数-它返回两对纬度和经度之间的(约莫)间隔(以米为单元).

DELIMITER $$

CREATE FUNCTION LAT_LNG_DISTANCE(lat1 FLOAT,lng1 FLOAT,lat2 FLOAT,lng2 FLOAT) RETURNS int(11)
BEGIN
  DECLARE latD FLOAT;
  DECLARE lngD FLOAT;
  DECLARE latS FLOAT;
  DECLARE lngS FLOAT;
  DECLARE a FLOAT;
  DECLARE c FLOAT;

  SET lat1 = RADIANS(lat1);
  SET lng1 = RADIANS(lng1);
  SET lat2 = RADIANS(lat2);
  SET lng2 = RADIANS(lng2);

  SET latD = lat2 - lat1;
  SET lngD = lng2 - lng1;

  SET latS = SIN(latD / 2);
  SET lngS = SIN(lngD / 2);

  SET a = POW(latS,2) + COS(lat1) * COS(lat2) * POW(lngS,2);
  SET c = 2 * ASIN(LEAST(1,SQRT(a)));

  RETURN ROUND(c * 6378137);
END;
$$
DELIMITER ;

此刻我们已经界说好了,我们必要按照用户给我们的邮政编码获取搜刮的来历.因为我不知道您的数据库简直切布局,因此我将行使通用联接和前提,这些前提和前提但愿与真实值足够相似,以便您轻松顺应.我将行使$var体现从中转达值PHP;不消说,它将必要以恰当的方法举办转义.

SELECT l.lat,l.lng
FROM city_locations l
INNER JOIN city_postcodes c
ON l.city_id = c.city_id
WHERE c.postcode = $postcode;

此刻,我们可以将该查询的功效转达给下一个查询,该查询将行使我们先前界说的LAT_LNG_DISTANCE函数.

SELECT *
FROM people p
INNER JOIN city_locations l
ON p.city_id = l.city_id
WHERE LAT_LNG_DISTANCE(l.lat,l.lng,$search_lat,$search_lng) < p.range * 1609;

趁便说一句,1609是一英里的米数.我但愿我已经正确领略了这个题目!

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读