首页 / PHP / PHP-按邮政编码/经度/纬度选择结果
PHP-按邮政编码/经度/纬度选择结果
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP-按邮政编码/经度/纬度选择结果,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2004字,纯文字阅读大概需要3分钟。
内容图文
我有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是一英里的米数.我希望我已经正确理解了这个问题!
内容总结
以上是互联网集市为您收集整理的PHP-按邮政编码/经度/纬度选择结果全部内容,希望文章能够帮你解决PHP-按邮政编码/经度/纬度选择结果所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。