感谢我磊哥

函数封装方法:

  1. //计算距离
  2. /*
  3. **$a 可多数坐标 就是可数组类型的
  4. ***$b 是登录者的坐标
  5. ***ps: lat经度 lng纬度 经度在前纬度在后
  6. ***
  7. ***/
  8. function juli($a, $b)
  9. {
  10. // $key[0] = '3uF44dvwWrW7S9GLgBPk3CVh';
  11. // $key[1] = 'G0APbmvaqwQTqqNVCcRk6gtOlT1DW9r3';
  12. // $kk = $key[rand(0,1)];
  13. $juli_api = 'http://api.map.baidu.com/routematrix/v2/riding?output=json&origins=' . $a . '&destinations=' . $b . '&ak=' . 'G0APbmvaqwQTqqNVCcRk6gtOlT1DW9r3';
  14. // dump($juli_api);exit;
  15. return os_get($juli_api);
  16. }
  17.  
  18. /**
  19. * 发送get请求
  20. * @param url $url 需要get的地址
  21. * @return json $data 返回数据
  22. * @author 5heAtMin9 <sheatming@foxmail.com>
  23. */
  24. function os_get($url){
  25. $curl = curl_init();
  26. curl_setopt($curl, CURLOPT_URL, $url);
  27. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  28. $data = curl_exec($curl);
  29. curl_close($curl);
  30. return $data;
  31. }

控制器里调用方法:

  1. $dingdan = M('ying_dingdan')->where($where)->page($p,10)->order('time DESC')->select();
  2. $zuobiao = array();
  3. foreach($dingdan as $k=>$r){
  4. $member = M('ying_member')->where(array('uid'=>$r['uid']))->field('logo,name,lng,lat')->find();/*找出发布者的lat lng*/
  5. $zuobiao[$k] = $member['lat'].','.$member['lng'];
  6. }
  7.  
  8. /*根据登陆者的经度纬度 算出与发布者的距离*/
  9. if($post['lat'] != '' && $post['lng'] != ''){
  10. $a = implode('|',$zuobiao);
  11. $b = $post['lat'] .','. $post['lng'];
  12. $c = juli($a,$b);
  13. $d = json_decode($c,true);
  14. foreach($dingdan as $k=>$r){
  15. if(!$post['lat']){
  16. $dingdan[$k]['juli'] = '';
  17. }else{
  18. $dingdan[$k]['juli'] = round(($d['result'][$k]['distance']['value'] / 1000),1);
  19. }
  20. }
  21. $dingdan = M('ying_dingdan')->where($where)->page($p,10)->order('time DESC')->select();
  22. $zuobiao = array();
  23. foreach($dingdan as $k=>$r){
  24. $member = M('ying_member')->where(array('uid'=>$r['uid']))->field('logo,name,lng,lat')->find();/*找出发布者的lat lng*/
  25. $zuobiao[$k] = $member['lat'].','.$member['lng'];
  26. }
  27.  
  28. /*根据登陆者的经度纬度 算出与发布者的距离*/
  29. if($post['lat'] != '' && $post['lng'] != ''){
  30. $a = implode('|',$zuobiao);
  31. $b = $post['lat'] .','. $post['lng'];
  32. $c = juli($a,$b);
  33. $d = json_decode($c,true);
  34. foreach($dingdan as $k=>$r){
  35. if(!$post['lat']){
  36. $dingdan[$k]['juli'] = '';
  37. }else{
  38. $dingdan[$k]['juli'] = round(($d['result'][$k]['distance']['value'] / 1000),1);
  39. }
  40. }
  41. $orderFile = array();
  42. foreach($dingdan as $k=>$r){
  43. $orderFile[]=$r['juli'];
  44. }
  45. array_multisort($orderFile ,SORT_ASC, $dingdan );/*按照距离排序*/
  46.  
  47. }

thinkphp 百度地图Api坐标计算 A坐标距离B坐标多少公里 并按照距离近的排序 坐标排序 外部字段排序的更多相关文章

  1. 深入浅出百度地图API开发系列(1):前言

    百度地图API目前在地图API领域越来越受到众多开发者的关注,许多应用都使用到了百度地图API服务,包括博主me,我自己使用做的是Javascript API,根据经验,我想整理出一份系列教程,如果能 ...

  2. 【百度地图API】如何制作可拖拽的沿道路测距

    原文:[百度地图API]如何制作可拖拽的沿道路测距 摘要: 地图测距,大家都会,不就map.getDistance麼.可是,这只能测任意两点的直线距离,用途不够实际啊.比如,我想测试北京天安门到北京后 ...

  3. 【百度地图API】如何根据摩卡托坐标进行POI查询,和计算两点距离

    原文:[百度地图API]如何根据摩卡托坐标进行POI查询,和计算两点距离 摘要: 百度地图API有两种坐标系,一种是百度经纬度,一种是摩卡托坐标系.在本章你将学会: 1.如何相互转换这两种坐标: 2. ...

  4. 百度地图API二:根据标注点坐标范围计算显示缩放级别zoom自适应显示地图

    原文:百度地图API二:根据标注点坐标范围计算显示缩放级别zoom自适应显示地图 版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/liusaint1992/ ...

  5. 百度地图API 地图圈区域并计算坐标点是否在区域内

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 【百度地图API】如何在地图上添加标注?——另有:坐标拾取工具+打车费用接口介绍

    原文:[百度地图API]如何在地图上添加标注?--另有:坐标拾取工具+打车费用接口介绍 摘要: 在这篇文章中,你将学会,如何利用百度地图API进行标注.如何使用API新增的打车费用接口. ------ ...

  7. 利用百度地图API,获取经纬度坐标

    利用百度地图API,获取经纬度坐标 代码很简单,但在网上没找到现成的获取地图经纬度的页面. 就是想,给当前页面传递一个经纬度,自动定位到此经纬度.然后可以重新选择,选择完返回经纬度. 效果如下: 源代 ...

  8. PHP+百度地图API+JAVASCRIPT实现GPS坐标与百度坐标转换的实例

    原文:PHP+百度地图API+JAVASCRIPT实现GPS坐标与百度坐标转换的实例 <!--小幅的坐标转换点位程序--> <!DOCTYPE html> <html&g ...

  9. 【地图功能开发系列:二】根据地址名称通过百度地图API查询出坐标

    根据地址名称通过百度地图API查询出坐标 百度地图ApiUrl string url = "http://api.map.baidu.com/geocoder?address={0}& ...

随机推荐

  1. python3 图片文字识别

    最近用到了图片文字识别这个功能,从网上搜查了一下,决定利用百度的文字识别接口.通过测试发现文字识别率还可以.下面就测试过程简要说明一下 1.注册用户 链接:https://login.bce.baid ...

  2. MultipartFile文件编码判断

    MultipartFile文件编码判断 搜索:Java 判断文件的字符集编码 https://blog.csdn.net/top_code/article/details/8891796 但是在Mul ...

  3. win7&win10 右键添加 cmd

    修改注册表,位置有 3 个,重复即可: 桌面右键: HKEY_CLASSES_ROOT\Directory\Background\shell 文件夹右键:HKEY_CLASSES_ROOT\Direc ...

  4. go微服务框架go-micro深度学习(四) rpc方法调用过程详解

    上一篇帖子go微服务框架go-micro深度学习(三) Registry服务的注册和发现详细解释了go-micro是如何做服务注册和发现在,服务端注册server信息,client获取server的地 ...

  5. Java编译过程(传送门)

    我不是要做一门编程语言,了解这个对我现在的工作也没什么帮助,纯粹好奇而已. 传送门

  6. mysql 动态增加列,查找表中有多少列,具体什么列。 通过JSON生成mysql表 支持子JSON

    好消息, 程序员专用早餐机.和掌柜说 ideaam,可以节省20元. 点击链接  或復·制这段描述¥k3MbbVKccMU¥后到淘♂寳♀ 或者 淘宝扫码 支持下同行哈 ---------------- ...

  7. SQL Server does not purge row versioning records even the transaction are committed if there are other open transaction running in the databases with read-committed snapshot enabled .

    This is a by-design behavior. There is only one allocation unit in tempdb that istracking the versio ...

  8. yaf项目将500错误打印到页面上

    一般在yaf项目调试的时候,如果代码有错误,页面只会响应500错误,但看不到哪里报了什么错误,通过开启yaf的一个配置可以将错误信息显示在页面上. 打开项目的index.php入口文件,在开头加入如下 ...

  9. 从零开始搭建FAQ引擎--基于ES的字面匹配

    从零开始搭建FAQ引擎--基于ES的字面匹配

  10. py-faster-rcnn 训练参数修改(转)

    faster rcnn默认有三种网络模型 ZF(小).VGG_CNN_M_1024(中).VGG16 (大) 训练图片大小为500*500,类别数1. 一. 修改VGG_CNN_M_1024模型配置文 ...