根据浏览器获取经纬度(百度地图)
(后面的AK是我申请的测试用的)
可直接访问地址查看效果:https://www.buruyouni.com/web/map.html (电脑定位应该是根据ip定位的,手机根据GPS速度非常快的)
注意,页面不能直接打开,要用localhost:/xxx.html这样打开
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";}
</style>
<script type="text/javascript" src="//api.map.baidu.com/api?v=2.0&ak=t7fC0AWQLTEO9YeOsWWLp8MT9S7su5g6"></script>
<title>浏览器定位</title>
</head>
<body>
<div id="allmap"></div>
</body>
</html>
<script type="text/javascript">
// 百度地图API功能
<!-- var map = new BMap.Map("allmap"); -->
<!-- var point = new BMap.Point(116.331398,39.897445); -->
<!-- map.centerAndZoom(point,12); -->
var map = new BMap.Map("allmap");
var geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(function(r){
if(this.getStatus() == BMAP_STATUS_SUCCESS){
//var mk = new BMap.Marker(r.point);
//map.addOverlay(mk);
//map.panTo(r.point);
alert('您的位置:'+r.point.lng+','+r.point.lat);
}else {
alert('failed'+this.getStatus());
}
})
//关于状态码
//BMAP_STATUS_SUCCESS 检索成功。对应数值“0”。
//BMAP_STATUS_CITY_LIST 城市列表。对应数值“1”。
//BMAP_STATUS_UNKNOWN_LOCATION 位置结果未知。对应数值“2”。
//BMAP_STATUS_UNKNOWN_ROUTE 导航结果未知。对应数值“3”。
//BMAP_STATUS_INVALID_KEY 非法密钥。对应数值“4”。
//BMAP_STATUS_INVALID_REQUEST 非法请求。对应数值“5”。
//BMAP_STATUS_PERMISSION_DENIED 没有权限。对应数值“6”。(自 1.1 新增)
//BMAP_STATUS_SERVICE_UNAVAILABLE 服务不可用。对应数值“7”。(自 1.1 新增)
//BMAP_STATUS_TIMEOUT 超时。对应数值“8”。(自 1.1 新增)
</script>
计算经纬度的距离(PHP版本):
需要注意的是这里计算的是直线距离,非路线的距离,一般情况路线距离要比直线距离要长的,下面mysql和go版本的也是计算的是直线距离,需要计算路线距离的还是得用高德或者某度的地图api来计算会真确点
<?php
/**
* 计算两点地理坐标之间的距离
* @param $longitude1 起点经度
* @param $latitude1 起点纬度
* @param $longitude2 终点经度
* @param $latitude2 终点纬度
*/
function getDistance($longitude1, $latitude1, $longitude2, $latitude2){
$EARTH_RADIUS = 6370.996; // 地球半径系数
$PI = 3.1415926;
$radLat1 = $latitude1*$PI/180.0;
$radLat2 = $latitude2*$PI/180.0;
$radLng1 = $longitude1*$PI/180.0;
$radLng2 = $longitude2*$PI/180.0;
$a = $radLat1 - $radLat2;
$b = $radLng1 - $radLng2;
$distance = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1) * cos($radLat2) * pow(sin($b/2),2)));
$distance = $distance * $EARTH_RADIUS * 1000;
$uint = 'm';
if($distance>1000){
$distance = $distance / 1000;
$uint = 'km';
$result = round($distance, 2);
}else{
$result = ceil($distance);
}
return $result.$uint;
}
// 起点坐标
$longitude1 = 113.330405;
$latitude1 = 23.147255;
// 终点坐标
$longitude2 = 113.314271;
$latitude2 = 23.1323;
$distance = getDistance($longitude1, $latitude1, $longitude2, $latitude2);
echo $distance; // 2.34km
?>
计算经纬度距离,mysql版本(注意mysql必须大于等于5.6,因为st_distance函数是从mysql5.6.1才加入的)
数据表:
计算经度:113.1038457 纬度:23.01989148到上面的地址的距离根据距离升序排序,计算结果单位是米
SELECT *,(st_distance(point(jd,wd),point(113.1038457,23.01989148))*111195) as juli_m FROM place ORDER BY juli_m ASC
st_distance(point(jd,wd),point(113.1038457,23.01989148))这是计算出来的度数,乘以111195得出距离单位:米
计算经纬度距离go版本