pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

搜索附近的人PHP實(shí)現(xiàn)代碼

這篇文章主要為大家詳細(xì)介紹了搜索附近的人PHP實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了PHP實(shí)現(xiàn)搜索附近的人具體代碼,供大家參考,具體內(nèi)容如下

實(shí)現(xiàn)思路:

首先,我們應(yīng)該這樣想: 既然我們知道了用戶當(dāng)前位置的經(jīng)緯度,又知道我們將要搜索的范圍,我們可不可以計(jì)算出一個范圍 ?也就是說,根據(jù)一個中心點(diǎn)和半徑,計(jì)算出符合條件的經(jīng)緯度的最大值和最小值 。

具體實(shí)現(xiàn):

那么到此,想要獨(dú)立思考完成的小伙伴可以不要繼續(xù)往下看了。
上面我們提到該功能的一個實(shí)現(xiàn)原理,接下來我們就講解一下具體的實(shí)現(xiàn)步驟。
我們先聲明一個函數(shù),用作計(jì)算經(jīng)緯度的范圍:

/**
 * 根據(jù)經(jīng)緯度和半徑計(jì)算出范圍
 * @param string $lat 緯度
 * @param String $lng 經(jīng)度
 * @param float $radius 半徑
 * @return Array 范圍數(shù)組
 */
private function calcScope($lat, $lng, $radius) {
  $degree = (24901*1609)/360.0;
  $dpmLat = 1/$degree;

  $radiusLat = $dpmLat*$radius;
  $minLat = $lat - $radiusLat;    // 最小緯度
  $maxLat = $lat + $radiusLat;    // 最大緯度

  $mpdLng = $degree*cos($lat * (PI/180));
  $dpmLng = 1 / $mpdLng;
  $radiusLng = $dpmLng*$radius;
  $minLng = $lng - $radiusLng;   // 最小經(jīng)度
  $maxLng = $lng + $radiusLng;   // 最大經(jīng)度

  /** 返回范圍數(shù)組 */
  $scope = array(
    'minLat'  => $minLat,
    'maxLat'  => $maxLat,
    'minLng'  => $minLng,
    'maxLng'  => $maxLng
    );
  return $scope;
}

返回的數(shù)組中包含了在 $radius 范圍內(nèi),符合條件的最大最小經(jīng)緯度。
既然我們已經(jīng)獲取到了范圍,那么我們就可以開始從數(shù)據(jù)庫中查找所有在這個經(jīng)緯度范圍內(nèi)符合條件的記錄:

/**
 * 根據(jù)經(jīng)緯度和半徑查詢在此范圍內(nèi)的所有的電站
 * @param String $lat  緯度
 * @param String $lng  經(jīng)度
 * @param float $radius 半徑
 * @return Array     計(jì)算出來的結(jié)果
 */
public function searchByLatAndLng($lat, $lng, $radius) {
  $scope = $this->calcScope($lat, $lng, $radius);   // 調(diào)用范圍計(jì)算函數(shù),獲取最大最小經(jīng)緯度
  /** 查詢經(jīng)緯度在 $radius 范圍內(nèi)的電站的詳細(xì)地址 */
  $sql = 'SELECT `字段` FROM `表名` WHERE `Latitude` < '.$scope['maxLat'].' and `Latitude` > '.$scope['minLat'].' and `Longitude` < '.$scope['maxLng'].' and `Longitude` > '.$scope['minLng'];

  $stmt = self::$db->query($sql);
  $res = $stmt->fetchAll(PDO::FETCH_ASSOC);    // 獲取查詢結(jié)果并返回
  return $res;
}

擴(kuò)展:

直到現(xiàn)在,我們已經(jīng)知道了如何計(jì)算出附近的人,但在實(shí)際需求中,我們往往需要計(jì)算出每一個人與當(dāng)前中心點(diǎn)的實(shí)際距離。
接著,我們再來看一個方法:

/**
 * 獲取兩個經(jīng)緯度之間的距離
 * @param string $lat1 緯一
 * @param String $lng1 經(jīng)一
 * @param String $lat2 緯二
 * @param String $lng2 經(jīng)二
 * @return float 返回兩點(diǎn)之間的距離
 */
public function calcDistance($lat1, $lng1, $lat2, $lng2) {
  /** 轉(zhuǎn)換數(shù)據(jù)類型為 double */
  $lat1 = doubleval($lat1);
  $lng1 = doubleval($lng1);
  $lat2 = doubleval($lat2);
  $lng2 = doubleval($lng2);
  /** 以下算法是 Google 出來的,與大多數(shù)經(jīng)緯度計(jì)算工具結(jié)果一致 */
  $theta = $lng1 - $lng2;
  $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
  $dist = acos($dist);
  $dist = rad2deg($dist);
  $miles = $dist * 60 * 1.1515;
  return ($miles * 1.609344);
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持。

您可能感興趣的文章:

  • php+ajax做仿百度搜索下拉自動提示框(有實(shí)例)
  • php啟用sphinx全文搜索的實(shí)現(xiàn)方法
  • php站內(nèi)搜索并高亮顯示關(guān)鍵字的實(shí)現(xiàn)代碼
  • PHP 搜索查詢功能實(shí)現(xiàn)
  • php 搜索框提示(自動完成)實(shí)例代碼
  • jquery+php實(shí)現(xiàn)搜索框自動提示
  • ThinkPHP讓分頁保持搜索狀態(tài)的方法
  • php使用正則表達(dá)式進(jìn)行字符串搜索的方法
  • 利用PHP+JS實(shí)現(xiàn)搜索自動提示(實(shí)例)
【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過測試外,其他素材未做測試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請勿用于商業(yè)用途。如損害你的權(quán)益請聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

主站蜘蛛池模板: 河南新乡德诚生产厂家主营震动筛,振动筛设备,筛机,塑料震动筛选机 | 无轨电动平车_轨道平车_蓄电池电动平车★尽在新乡百特智能转运设备有限公司 | 物联网卡_物联网卡购买平台_移动物联网卡办理_移动联通电信流量卡通信模组采购平台? | 北京中航时代-耐电压击穿试验仪厂家-电压击穿试验机 | 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | 五轴加工中心_数控加工中心_铝型材加工中心-罗威斯 | 集菌仪_智能集菌仪_全封闭集菌仪_无菌检查集菌仪厂家-那艾 | 南京交通事故律师-专打交通事故的南京律师 | 杭州厂房降温,车间降温设备,车间通风降温,厂房降温方案,杭州嘉友实业爽风品牌 | ERP企业管理系统永久免费版_在线ERP系统_OA办公_云版软件官网 | 热处理温控箱,热处理控制箱厂家-吴江市兴达电热设备厂 | MES系统-WMS系统-MES定制开发-制造执行MES解决方案-罗浮云计算 | 高压无油空压机_无油水润滑空压机_水润滑无油螺杆空压机_无油空压机厂家-科普柯超滤(广东)节能科技有限公司 | 青岛代理记账_青岛李沧代理记账公司_青岛崂山代理记账一个月多少钱_青岛德辉财税事务所官网 | 皮带式输送机械|链板式输送机|不锈钢输送机|网带输送机械设备——青岛鸿儒机械有限公司 | 广州食堂承包_广州团餐配送_广州堂食餐饮服务公司 - 旺记餐饮 | RV减速机-蜗轮蜗杆减速机-洗车机减速机-减速机厂家-艾思捷 | 哈尔滨治「失眠/抑郁/焦虑症/精神心理」专科医院排行榜-京科脑康免费咨询 一对一诊疗 | 杭州顺源过滤机械有限公司官网-压滤机_板框压滤机_厢式隔膜压滤机厂家 | 雷蒙磨,雷蒙磨粉机,雷蒙磨机 - 巩义市大峪沟高峰机械厂 | 自动焊锡机_点胶机_螺丝机-锐驰机器人 | 恒压供水控制柜|无负压|一体化泵站控制柜|PLC远程调试|MCGS触摸屏|自动控制方案-联致自控设备 | 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 | 顺辉瓷砖-大国品牌-中国顺辉 | 顶呱呱交易平台-行业领先的公司资产交易服务平台 | 北京四合院出租,北京四合院出售,北京平房买卖 - 顺益兴四合院 | 棉柔巾代加工_洗脸巾oem_一次性毛巾_浴巾生产厂家-杭州禾壹卫品科技有限公司 | 泥浆在线密度计厂家-防爆数字压力表-膜盒-远传压力表厂家-江苏大亚自控设备有限公司 | 中山市派格家具有限公司【官网】 | 丹佛斯压力传感器,WISE温度传感器,WISE压力开关,丹佛斯温度开关-上海力笙工业设备有限公司 | 黑龙江「京科脑康」医院-哈尔滨失眠医院_哈尔滨治疗抑郁症医院_哈尔滨精神心理医院 | 游泳池设备安装工程_恒温泳池设备_儿童游泳池设备厂家_游泳池水处理设备-东莞市君达泳池设备有限公司 | 包装机_厂家_价格-山东包装机有限公司 | 开云(中国)Kaiyun·官方网站-登录入口 | 曙光腾达官网-天津脚手架租赁-木板架出租-移动门式脚手架租赁「免费搭设」 | 手机游戏_热门软件app下载_好玩的安卓游戏下载基地-吾爱下载站 | 科昊仪器超纯水机系统-可成气相液氮罐-美菱超低温冰箱-西安昊兴生物科技有限公司 | 衬塑设备,衬四氟设备,衬氟设备-淄博鲲鹏防腐设备有限公司 | 深圳市索富通实业有限公司-可燃气体报警器 | 可燃气体探测器 | 气体检测仪 | 营养师网,营养师考试时间,报名入口—网站首页 | 防火卷帘门价格-聊城一维工贸特级防火卷帘门厂家▲ |