感谢我磊哥

函数封装方法:

//计算距离
/*
**$a 可多数坐标 就是可数组类型的
***$b 是登录者的坐标
***ps: lat经度 lng纬度 经度在前纬度在后
***
***/
function juli($a, $b)
{
// $key[0] = '3uF44dvwWrW7S9GLgBPk3CVh';
// $key[1] = 'G0APbmvaqwQTqqNVCcRk6gtOlT1DW9r3';
// $kk = $key[rand(0,1)];
$juli_api = 'http://api.map.baidu.com/routematrix/v2/riding?output=json&origins=' . $a . '&destinations=' . $b . '&ak=' . 'G0APbmvaqwQTqqNVCcRk6gtOlT1DW9r3';
// dump($juli_api);exit;
return os_get($juli_api);
} /**
* 发送get请求
* @param url $url 需要get的地址
* @return json $data 返回数据
* @author 5heAtMin9 <sheatming@foxmail.com>
*/
function os_get($url){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl);
curl_close($curl);
return $data;
}

控制器里调用方法:

$dingdan = M('ying_dingdan')->where($where)->page($p,10)->order('time DESC')->select();
$zuobiao = array();
foreach($dingdan as $k=>$r){
$member = M('ying_member')->where(array('uid'=>$r['uid']))->field('logo,name,lng,lat')->find();/*找出发布者的lat lng*/
$zuobiao[$k] = $member['lat'].','.$member['lng'];
} /*根据登陆者的经度纬度 算出与发布者的距离*/
if($post['lat'] != '' && $post['lng'] != ''){
$a = implode('|',$zuobiao);
$b = $post['lat'] .','. $post['lng'];
$c = juli($a,$b);
$d = json_decode($c,true);
foreach($dingdan as $k=>$r){
if(!$post['lat']){
$dingdan[$k]['juli'] = '';
}else{
$dingdan[$k]['juli'] = round(($d['result'][$k]['distance']['value'] / 1000),1);
}
}
$dingdan = M('ying_dingdan')->where($where)->page($p,10)->order('time DESC')->select();
$zuobiao = array();
foreach($dingdan as $k=>$r){
$member = M('ying_member')->where(array('uid'=>$r['uid']))->field('logo,name,lng,lat')->find();/*找出发布者的lat lng*/
$zuobiao[$k] = $member['lat'].','.$member['lng'];
} /*根据登陆者的经度纬度 算出与发布者的距离*/
if($post['lat'] != '' && $post['lng'] != ''){
$a = implode('|',$zuobiao);
$b = $post['lat'] .','. $post['lng'];
$c = juli($a,$b);
$d = json_decode($c,true);
foreach($dingdan as $k=>$r){
if(!$post['lat']){
$dingdan[$k]['juli'] = '';
}else{
$dingdan[$k]['juli'] = round(($d['result'][$k]['distance']['value'] / 1000),1);
}
}
$orderFile = array();
foreach($dingdan as $k=>$r){
$orderFile[]=$r['juli'];
}
array_multisort($orderFile ,SORT_ASC, $dingdan );/*按照距离排序*/ }

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. Spark2.2(三十九):如何根据appName监控spark任务,当任务不存在则启动(任务存在当超过多久没有活动状态则kill,等待下次启动)

    业务需求 实现一个根据spark任务的appName来监控任务是否存在,及任务是否卡死的监控. 1)给定一个appName,根据appName从yarn application -list中验证任务是 ...

  2. linux 压缩当前文件夹下所有文件

    linux zip压缩.压缩当前文件夹下所有文件,压缩为a.zip.命令行的方法是怎样. zip  -r fileName.zip  文件夹名 tar tar命令可以用来压缩打包单文件.多个文件.单个 ...

  3. Log4j/Log4j2自定义Appender来实现日志级别计数统计及监控

    一.简述 本文主要讲如何基于Log4j2来实现自定义的Appender.一般用途是用于Log4j2自带的Appender不足以满足我们的需求,或者需要我们对日志进行拦截统计等操作时,需要我们自定义Ap ...

  4. Kafka#4:存储设计 分布式设计 源码分析

    https://sites.google.com/a/mammatustech.com/mammatusmain/kafka-architecture/4-kafka-detailed-archite ...

  5. Linux常用的基础组件

    Linux服务器(新机器) yum install gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf git yum  ...

  6. MySQL yum 在线与本地包方式安装

     以下实践操作是在 liux-centos7 上安装配置 先检测是否安装mysql,然后在拆卸mysql # 检测[root@localhost ~]# yum list installed | gr ...

  7. linux配置 数据库主从同步

    数据库的读写分离能很大程度上减轻数据库的压力,读写分离的前提就是主从数据同步,然后在主库做增删改,从库做查询. 例如: 主库:192.168.0.1 从库:192.168.0.2 两个数据库都安装了M ...

  8. java直接生成zip压缩文件精简代码(跳过txt文件)

    /** * @param args */ public static void main(String[] args) throws Exception{ ZipOutputStream zos = ...

  9. 【2019年04月10日】股票的滚动市盈率PE最低排名

    仅根据最新的市盈率计算公式进行排名,无法对未来的业绩做出预测. 新钢股份(SH600782) - 滚动市盈率PE:3.87 - 滚动市净率PB:1.29 - 滚动年化股息收益率:1.31% - 钢铁 ...

  10. js复制文本内容到剪贴板

    记录一下使用clipboardData复制不成功. 1.定义一个按钮执行复制 <div> <button type="button" id="copyR ...