请自行到百度地图官网申请您的ak


<!--前端获取手机经纬度的代码--> <!--<!DOCTYPE html>-->
<!--<html lang="en">-->
<!---->
<!--<head>-->
<!-- <meta charset="UTF-8">-->
<!-- <title>text</title>-->
<!-- <script>-->
<!-- function getLocation() {-->
<!-- if (navigator.geolocation) {-->
<!-- navigator.geolocation.getCurrentPosition(showMap,errorMap);-->
<!-- } else {-->
<!-- alert("您的浏览器不支持")-->
<!-- }-->
<!---->
<!-- }-->
<!-- function showMap(position){-->
<!-- var longitude = position.coords.longitude;-->
<!-- var latitude = position.coords.latitude;-->
<!-- alert("您的位置是:"+longitude+ "," + latitude);-->
<!-- }-->
<!-- function errorMap(value){-->
<!-- switch(value.code){-->
<!-- case 1: alert("位置请求被拒绝");break;-->
<!-- case 2: alert("暂时获取不到位置信息");break;-->
<!-- case 3: alert("请求超时");break;-->
<!-- case 4: alert("未知错误");break;-->
<!-- }-->
<!-- }-->
<!-- -->
<!-- getLocation();-->
<!-- </script>-->
<!-- -->
<!--</head>-->
<!--</html>--> <?php /**
* 计算两个地址之间的距离,单位:米
* 地址要尽量详细,减小误差
* @param address
* @param $param
* @return $param
*/
function calculateDistance($address,$param){
if (!is_array($param)){
throw new Exception("参数必须为array");
}
$length = count($param);
$url = urldecode("http://api.map.baidu.com/cloudgc/v1?ak=您的ak&address=".$address);
$result = json_decode(get($url));
$startLatLng = array(
"lat" => $result->result[0]->location->lat,
"lng" => $result->result[0]->location->lng
);
for ($i=0; $i<$length; $i++){
$url = urldecode("http://api.map.baidu.com/cloudgc/v1?ak=您的ak&address=".$param[$i]['address']);
$result = json_decode(get($url));
$endLatLng = array(
"lat" => $result->result[0]->location->lat,
"lng" => $result->result[0]->location->lng
);
$distance = array( "distance"=>getDistance($startLatLng,$endLatLng),"unit"=>"m");
array_push($param[$i],$distance);
}
return $param;
}
// $add = array(
// array("address"=>"福建省厦门市集美区"),
// array("address"=>"北京市海淀区上地十街10号")
// );
// print_r(calculateDistance("福建省厦门市集美区",$add)); /**
* 发送GET请求
* @param url
* @param param
* @return result
*/ function get($url, $param=array()){
if(!is_array($param)){
throw new Exception("参数必须为array");
}
$p='';
foreach($param as $key => $value){
$p=$p.$key.'='.$value.'&';
}
if(preg_match('/\?[\d\D]+/',$url)){//matched ?c
$p='&'.$p;
}else if(preg_match('/\?$/',$url)){//matched ?$
$p=$p;
}else{
$p='?'.$p;
}
$p=preg_replace('/&$/','',$p);
$url=$url.$p;
//echo $url;
$http =curl_init($url);
curl_setopt($http, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($http, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($http,CURLOPT_RETURNTRANSFER,1);
curl_setopt($http, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
curl_setopt($http, CURLOPT_RETURNTRANSFER,1);
curl_setopt($http, CURLOPT_HEADER,false);
$result=curl_exec($http);
curl_close($http);
return $result;
}
/**
* 计算两点之间距离
* @param start
* @param end
* @return 米
*/
function getDistance($startLatLng,$endLatLng){
if (is_array($startLatLng)&&is_array($endLatLng)){ $lat1 = (pi()/180)*$startLatLng['lat'];
$lat2 = (pi()/180)*$endLatLng['lat'];
$lng1 = (pi()/180)*$startLatLng['lng'];
$lng2 = (pi()/180)*$endLatLng['lng']; //地球半径
$R = 6371; //两点间的距离 km,如果想要米的话,结果*1000就可以了
$d = acos(sin($lat1)*sin($lat2)+cos($lat1)*cos($lat2)*cos($lng2-$lng1))*$R;
}else{
$d = 1;
}
return $d*1000; } /**
* 通过ip获取地址
* @param $ip
* @throws Exception
* @return $result
*/
function getAddressByIp($ip){
if (!filter_var($ip,FILTER_VALIDATE_IP)){
throw new Exception("IP无效");
}
$url = "http://api.map.baidu.com/location/ip?ak=您的ak&coor=bd09ll&ip=".$ip;
$result = json_decode(get($url));
if ($result->status != 0){
throw new Exception("获取坐标失败");
}
$url = "http://api.map.baidu.com/geocoder/v2/?location=".$result->content->point->y.",".$result->content->point->x."&ak=您的ak&output=json"; $result= json_decode(get($url));
echo $result->result->formatted_address;
return $result->result->formatted_address;
} //getAddressByIp("120.41.85.225");/**
* 通过GPS定位拿到具体位置,电脑只有IE、edge才有定位权限
* @param $latLng=array('lat'=>?,'lng'=>?)
* @return $result->result->formatted_address
*/ function getAddressByGPS($latLng)
{
$url = "http://api.map.baidu.com/geocoder/v2/?location=" .$latLng['lat'].",".$latLng['lng']. "&ak=您的ak&output=json";
$result = json_decode(get($url));
return $result->result->formatted_address;
} $latLng = array(
'lat'=>24.609098,
'lng'=>118.045559
);
echo getAddressByGPS($latLng);

php百度地图计算两地现实距离的更多相关文章

  1. iOS 百度地图计算两个点时间的距离

    最近在解项目bug,更新地位城市的时候有个错误,后来想在位置改变多少距离之后,再取更新位置,这个功能去年做过.但是又忘记了! 所以还是记录一下吧. 百度地图提供了一个方法: BMKMapPointFo ...

  2. JS高德地图计算两地之间的实际距离

    这个是通过导航的方式来获取两地之间的实际距离,和消耗的时间(key值自己去申请哈) <!doctype html> <html> <head> <meta c ...

  3. 百度地图坐标之间的距离php

    function GetDistance($lat1, $lng1, $lat2, $lng2){ define('PI',3.1415926535898); define('EARTH_RADIUS ...

  4. 百度地图 - demo

    项目需要集成百度地图,那么关于如何集成百度地图的事,就自己去百度开放平台查看文档吧,这是非常简单的事,在这里就不多说了. 那么下面我就说说我在这个demo里所做的事. 首先,项目需要具备定位及计算两地 ...

  5. Java根据两点的经纬度来计算之间的距离

    import java.util.HashMap; import java.util.Map; public class MapDistance { private static double EAR ...

  6. 百度地图api 实例 自动提示 并计算两地的行驶距离

    百度地图api 实例 自动提示 并计算两地的行驶距离 <!DOCTYPE html> <html> <head> <meta http-equiv=" ...

  7. 百度地图Api 根据两个坐标点计算距离

    百度地图Android Sdk的Api里面,没有现成的直接获取两个坐标点之间距离的方法,但是,在jsapi里面,有直接计算距离的方法. class Point: pass def max(a,b): ...

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

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

  9. Java-根据经纬度计算距离(百度地图距离)

    最近碰到一个需求,需要根据两个点的经纬度查询两点的距离.感觉以后还会用到,所以小记一波. 第一步:添加Maven依赖. <dependency> <groupId>org.ga ...

随机推荐

  1. 二分图——最小覆盖poj2226

    详见进阶指南 #include<iostream> #include<cstring> #include<cstdio> using namespace std; ...

  2. 19-10-29-Night-X

    布谷. 欢迎大家来不耻下问. 这里是正解不会,暴力写跪,乱搞鸡肋的某虻 . 好想放假啊!!!! 话说猫厂现在产量低迷…… ZJ一下: T1,三维偏序,只码了$\Theta(N^2)$暴力 T2,暴力愉 ...

  3. 深入浅出 Java Concurrency (33): 线程池 part 6 线程池的实现及原理 (1)[转]

    线程池数据结构与线程构造方法 由于已经看到了ThreadPoolExecutor的源码,因此很容易就看到了ThreadPoolExecutor线程池的数据结构.图1描述了这种数据结构. 图1 Thre ...

  4. Python2.7版本:定义类时为什么要继承object类?

    ********此答案摘自知乎,且经过自己实际运行后得出******** 继承 object 类的是新式类,不继承 object 类的是经典类 例子: 新式类: 经典类: B.C 是 A 的子类,D ...

  5. 将ERF格式转换成PCAP格式

    在研究网络流量分析的时候,wireshark默认采用pcap格式.对于用Endace DAG捕捉卡捕获的数据包,一般来说,都是erf格式的.一般来说,此种格式包含了更多了链路层信息.而我们采用wire ...

  6. xshell上传文件到linux

    z,sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具. 优点就是不用再开一个sftp工具登录上去上传下载文件. sz:将选定的文件发送(send)到本地机器 rz:运行该 ...

  7. 微信小程序上传报错:以下文件没有被打包上传: · .gitignore

    简单粗暴的办法就是:找到gitignore文件,把该文件删除掉即可. 在使用Git的过程中,我们喜欢有的文件比如日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这 ...

  8. hihocoder 1084 (哈希)

    题目链接 时间限制:4000ms 单点时限:4000ms 内存限制:256MB 描述 你知道KMP吗?它是用于判断一个字符串是否是另一个字符串的子串的算法.今天我们想去扩展它. 在信息理论中,在两个相 ...

  9. VS中添加配置X86平台

    最近IIS发布程序时,总是容易碰到下面的错误.这个错误网上绝大部分都是提出在VS把解决方案设置为在X86平台生成,然后再发布.但是查看应用程序后发现没有X86平台选项,下面是添加X86目标平台的方法.

  10. svn里update以后还是有红色的感叹号怎么办

    不用那么麻烦,直接还原就行了,客户端是TortoiseSVN的话,在该文件或文件夹上点右键,选择TortoiseSVN——revert有时还原之后系统反应没那么快,还是显示红色感叹号,刷新几下就正常了 ...