1. <script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak='自己申请'&s=1"></script>
  2. <script type="text/javascript" charset="utf-8">
  3.  
  4. var geolocation = new BMap.Geolocation();
  5. geolocation.getCurrentPosition(function (r) {
  6. if (this.getStatus() == BMAP_STATUS_SUCCESS) {
  7. var lat = r.point.lat;
  8. var lng = r.point.lng;
  9. }
  10. // return;
  11. var data = {'lat': lat, 'merchid': "{$item['id']}",'classid': "{$classitem['id']}", 'lng': lng};
  12. $.ajax({
  13. url: "{php echo mobileUrl('shop/category/ajaxcodot')}",
  14. data: data,
  15. cache: false
  16. }).done(function (result) {
  17. var data = jQuery.parseJSON(result);
  18. if (data.status == 1) {
  19. if(data.result.code == 1){
  20. console.log(data.result.code)
  21. $(".shop").html(data.result.html)
  22. // $("#coll").hide()
  23. }else{
  24. $(".shop").hide()
  25. $(".noinfo").show()
  26. }
  27. } else {
  28. alert("微信接口繁忙,请稍后再试!");
  29.  
  30. }
  31. });
  32. })
  33.  
  34. </script>

首先定位当前位置

  1. public function ajaxdot()//查询结果页
  2. {
  3. global $_W;
  4. global $_GPC;
  5.  
  6. $province = $_GPC['province'];
  7. $city = $_GPC['city'];
  8. $area = $_GPC['area'];
  9. $classid = $_GPC['classid'];
  10.  
  11. $lat = floatval($_GPC['lat']);
  12. $lng = floatval($_GPC['lng']);
  13.  
  14. $merch = pdo_fetch('SELECT * FROM ' . tablename('ewei_shop_merch_user') . ' WHERE id = '.$_GPC['merchid']);
  15. $where = 'where 1';
  16. $where.= " and province = '$province'";
  17. if($merch['cateid'] != 6)
  18. $where.= " and company_number = '{$merch['company_number']}'";
  19. if(!empty($city)){
  20. $where.= " and city = '$city'";
  21. }
  22. if(!empty($area)){
  23. $where.= " and area = '$area'";
  24. }
  25.  
  26. if($merch['cateid'] == 1 && $classid){
  27. // var_dump($classid);exit;
  28. $class = pdo_fetch('SELECT class_type FROM ' . tablename('ewei_shop_merch_user_class') . ' WHERE id = '.$classid);
  29. $class_type = $class['class_type'];
  30. $where.= " and class_type = '$class_type'";
  31. }
  32.  
  33. if(!empty($_GPC['classid'])){
  34. $classitem = pdo_fetch('SELECT * FROM ' . tablename('ewei_shop_merch_user_class') . ' WHERE id = :classid',array('classid' => $_GPC['classid']));
  35. }
  36.  
  37. $table = tablename('ewei_shop_merch_user_address');
  38. if($merch['cateid'] == 6){
  39. if($merch['company_number'] == 'TXDX001'){
  40. $where.= " and class_type = 'DX'";
  41. }else if($merch['company_number'] == 'TXDX002'){
  42. $where.= " and class_type = 'YD'";
  43. }else if($merch['company_number'] == 'TXDX003'){
  44. $where.= " and class_type = 'LT'";
  45. }
  46. $table =tablename('ewei_shop_merch_tx_address');
  47. }
  48.  
  49. $detail = pdo_fetchall("SELECT * FROM $table " ."$where");
  50.  
  51. // var_dump($detail);
  52.  
  53. if($detail){
  54. $html = '';
  55. foreach ($detail as $key=>$v) {
  56. if($v['lat'] == '' || $v['lng'] == ''){
  57. $lntarr = $this->addresstolatlag($v['detail']);
  58. $store['lng'] = $lntarr[0];
  59. $store['lat'] = $lntarr[1];
  60. // var_dump($lntarr);
  61. $lat_num = explode('.', $store['lat']);
  62. if (1 < sizeof($lat_num)) {
  63. $decimal = end($lat_num);
  64. $count = strlen($decimal);
  65. if ($count <= 6) {
  66. $gcj02 = $this->Convert_GCJ02_To_BD09($store['lat'], $store['lng']);
  67. $store['lat'] = $gcj02['lat'];
  68. $store['lng'] = $gcj02['lng'];
  69. }
  70. }
  71. $distance = m('util')->GetDistance($lat, $lng, $store['lat'], $store['lng'], 2);
  72. $where = array();
  73. $where['id'] = $v['id'];
  74. pdo_update('ewei_shop_merch_user_address', $store,$where);
  75. }else{
  76.  
  77. $distance = m('util')->GetDistance($lat, $lng, $v['lat'], $v['lng'], 2);
  78. }
  79. $detail[$key]['distance'] = $distance;
  80. $flag[] = $distance;
  81. }
  82. array_multisort($flag, SORT_ASC, $detail); //按距离排序
  83.  
  84. foreach ($detail as $key=>$v) {
  85. $distance = $v['distance'];
  86. $html.='<div class="iimg">
  87. <img id="" width="110" src="../addons/ewei_shopv2/static/img/4S.jpg" alt="" />
  88. </div>
  89. <div class="info">
  90. <p class="s_title">'.$v["shopname"].'</p>
  91. <p class="s_address"> '.$v['detail'].'</p>
  92. <p class="s_address" style=" color: green;"> 距您'.$distance.'km</p>
  93. <div class="s_bot">
  94. <a href="tel:'.$v["tel1"].'" style="color:#000"><div class="bimgl" style=" width: 40px;"><img width="20" src="../addons/ewei_shopv2/static/img/carTel.jpg" alt="" /> </div>
  95. <div class="btel"> '.$v['tel1'].'</div></a>
  96. <div class="bimgr" onclick="docollectad('.$v['id'].','.$table.')"><img width="20" src="../addons/ewei_shopv2/static/img/carSC.jpg" alt="" /></div>
  97. <a href="./index.php?i=4&c=entry&m=ewei_shopv2&do=mobile&r=shop.category.address&merchid='.$merch['id'].'&detail='.$v['detail'].'&shopname='.$v['shopname'].'"><div class="bimgr"><img width="20" src="../addons/ewei_shopv2/static/img/carDW.jpg" alt="" /></div></a>
  98. <div class="t_clear"></div>
  99. </div>
  100. </div>
  101. <div class="t_clear"></div>';
  102. }
  103.  
  104. $arr = array('code' => 1, 'html'=>$html);
  105. show_json(1, $arr);
  106. }else{
  107. $arr = array('code' => 2);
  108. show_json(1, $arr);
  109. }
  110. }

计算距离 并返回 数据

  1. /**
  2. * 计算两组经纬度坐标 之间的距离
  3. * params :lat1 纬度1; lng1 经度1; lat2 纬度2; lng2 经度2; len_type (1:m or 2:km);
  4. * return m or km
  5. */
  6. public function GetDistance($lat1, $lng1, $lat2, $lng2, $len_type = 1, $decimal = 2)
  7. {
  8. $pi = 3.1415926000000001;
  9. $er = 6378.1369999999997;
  10. $radLat1 = $lat1 * $pi / 180;
  11. $radLat2 = $lat2 * $pi / 180;
  12. $a = $radLat1 - $radLat2;
  13. $b = $lng1 * $pi / 180 - $lng2 * $pi / 180;
  14. $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2)));
  15. $s = $s * $er;
  16. $s = round($s * 1000);
  17.  
  18. if (1 < $len_type) {
  19. $s /= 1000;
  20. }
  21.  
  22. return round($s, $decimal);
  23. }

计算距离 函数

  1. public function Convert_GCJ02_To_BD09($lat, $lng)
  2. {
  3. $x_pi = 3.1415926535897931 * 3000 / 180;
  4. $x = $lng;
  5. $y = $lat;
  6. $z = sqrt($x * $x + $y * $y) - 2.0000000000000002E-5 * sin($y * $x_pi);
  7. $theta = atan2($y, $x) - 3.0000000000000001E-6 * cos($x * $x_pi);
  8. $data['lng'] = $z * cos($theta) + 0.0064999999999999997;
  9. $data['lat'] = $z * sin($theta) + 0.0060000000000000001;
  10. // var_dump($data);
  11. return $data;
  12. }
  13. public function addresstolatlag($address){
  14. $url='http://restapi.amap.com/v3/geocode/geo?address='.$address.'&key=48e598c5f71f20d2cd5a18d6e3142d27';
  15. // var_dump(file_get_contents($url));exit;
  16. if($result=file_get_contents($url))
  17. {
  18. $result = json_decode($result,true);
  19. //判断是否成功
  20. if(!empty($result['count'])){
  21. return explode(',',$result['geocodes']['0']['location']);
  22.  
  23. }else{
  24. return false;
  25. }
  26. }
  27. }

校正坐标函数 webapi函数

说明下 由于 客户给的地址 比较乱 只有详细地址 没有坐标
这边利用高德提供的webapi转换了坐标 之后计算的距离

php+高德地图webapi 高德jsapi 实现 当前位置与目标位置距离 并按照距离排序(坐标逆转换)的更多相关文章

  1. arcgis api 3.x for js 入门开发系列十七在线天地图、百度地图、高德地图(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  2. 在谷歌地图上绘制行政区域轮廓【结合高德地图的API】

    实现思路: 1.利用高德地图行政区域API获得坐标列表 2.将坐标列表绘制在谷歌地图上[因为高德地图和国内的谷歌地图都是采用GCJ02坐标系,所有误差很小,可以不进行坐标误差转换] 注意点: 1.用百 ...

  3. 【高德地图API】绘制大地线 Geodesic/Great Circles

    大地线(geodesic)是指地球椭球面上连接两点的最短程曲线. 大地线上每点的密切面(无限接近的3个点所构成的平面)都包含此点的曲面法线.因曲面法线互不相交,故为一条空间曲面曲线.在球面上,大圆弧( ...

  4. 高德地图的JSAPI学习笔记【一】

    高德地图的项目要做 学习笔记记录下来 一.注册账号并申请Key  二.准备页面写好 1.在页面添加 JS API 的入口脚本标签,并将其中「您申请的key值」替换为您刚刚申请的 key: <sc ...

  5. 如何实现在H5里调起高德地图APP?(下)

    这一篇文章将告诉您,如果直接打开高德地图APP,并展示路线规划.适合有定位的移动设备,可以查询到从“我的位置”到目的地的路径规划,并直接导航. 场景二.调起高德地图的路线规划功能 导航是目前JSAPI ...

  6. 如何实现在H5里调起高德地图APP?(上)

    这一篇文章,将讲述如何在H5里调起高德地图APP,并展示兴趣点.适合于展示某个餐馆,商场等,让用户自行选择前往方式. 场景一.在高德地图上展示Marker点或者POI标记 在一些基于位置分享的应用开发 ...

  7. 在H5页面内通过地址调起高德地图实现导航

    项目中用到的一个功能是要通过点击地址来实现打开地图app实现地址导航. 如下图: 实现思路就是在H5页面内通过点击marker图标然后进行当前位置与页面上地址的路程规划与导航. 由于项目中用到的是高德 ...

  8. 如何实现在H5里调起高德地图APP?

    http://www.cnblogs.com/milkmap/p/5912350.html 这一篇文章,将讲述如何在H5里调起高德地图APP,并展示兴趣点.适合于展示某个餐馆,商场等,让用户自行选择前 ...

  9. web开发如何使用高德地图API(四)通过AMap.Marker自定义标点

    说两句: 以下内容除了我自己写的部分,其他部分在高德开放平台都有(可点击外链访问). 我所整理的内容以实际项目为基础希望更有针对性的,更精简. 点击直奔主题. 准备工作: 首先,注册开发者账号,成为高 ...

随机推荐

  1. Android NestedScrollView与RecyclerView嵌套,以及NestedScrollView不会滚动到屏幕顶部解决

    ①NestedScrollView与RecyclerView嵌套,导致滚动惯性消失 解决:mRecyclerView.setNestedScrollingEnabled(false); ②Nested ...

  2. 【PIC单片机】MPLAB X IDE快速入门指南

    引言:近期由于项目实践需要,开始动手学习相关硬件知识.从PIC单片机入手. 单片机学习核心要点:查数据手册 配置寄存器 一.基于MPLAB X IDE配置位设置 MPLAB X IDE和MPLAB I ...

  3. jscode属性排序

    根据data中的value 对geCoorMap 进行排序,暂定降序排序. var data = [{name:"name1",value:29},{name:"name ...

  4. java中什么是上下文(servletContext)

    找了很多大佬的博客,看了之后还不是很清楚上下文到底是怎么回事,我个人理解 所谓上下文,它是用来存储系统的一些初始化信息,例如在jboss中通过配置文件指定了数据源,那么在jboss启动的时候就把这个文 ...

  5. Python的线程池实现

    # -*- coding: utf-8 -*- #Python的线程池实现 import Queue import threading import sys import time import ur ...

  6. SVN:验证位置时发生错误解决方案

    1. 2. 3.preferencens > svn >svn接口-选择SVNKit(Pure Java)设置后,再引用svn路径后,直接弹出输入用户名和密码就对了. 4.

  7. 源码安装mysql,及主从同步

    源码安装mysql [可选] 如果用源码安装cmake软件: cd /home/oldboy/tools/ tar xf cmake-.tar.gz cd cmake- ./configure #CM ...

  8. March 6 2017 Week 10 Monday

    A well-spent day brings happy sleep. 丰盈白日,安眠晚间. Recently my sleep is not so good, for one thing I go ...

  9. Java里面String的编码问题

    Java里面内置字符串全部是utf-16编码,详细的编码方式看这里 import java.nio.charset.Charset; import java.util.Arrays; import j ...

  10. POJ 3233 Matrix Power Series 【经典矩阵快速幂+二分】

    任意门:http://poj.org/problem?id=3233 Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K To ...