根据浏览器获取经纬度

根据浏览器获取经纬度(百度地图)

(后面的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版本

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值