不多说,直接上代码
<!Doctype html>
<html>
<head>
<meta charset=UTF-8">
<title>获取地理信息</title>
</head>
<body>
<div>navigator是window环境下的一个属性,包含了当前浏览器的一些信息数据</div>
<div>geolocation,HTML5的新属性,是navigator对象的一个属性</div>
<div>getCurrentPosition(getPositionSuccess, getPositionError, position_option)是geolocation下的一个方法,返回当前位置信息</div>
<!--获取用户当前位置信息-->
<script type="text/javascript">
/*
navigator.geolocation.watchPosition(getposition);
移动端使用,位置改变触发getposition
*/
getposition();
function getposition(){ //获取位置信息
if(navigator.geolocation){
/*
position_option配置navigator.geolocation.getCurrentPosition方法参数
*/
var position_option = {
enableHighAccuracy: true, //是否使用高精度设备获取值,gps>wifi>ip
maximumAge: 30000, //表示浏览器重新获取位置信息的时间间隔
timeout: 5000 //设定请求超时时间
};
/*
调用navigator.geolocation.getCurrentPosition方法可获取用户当前位置,该方法有三个参数:
获取成功后回调函数,并传入一个position值
获取失败后回调函数,并传入error信息
配置项:json格式,enableHighAccuracy,maximumAge,timeout三个参数配置
*/
navigator.geolocation.getCurrentPosition(getPositionSuccess, getPositionError, position_option);
}else{
alert("很抱歉,您的设备不支持地理定位!")
}
}
/*
成功后回调函数getPositionSuccess( position ),position为成功后返回信息对象
*/
function getPositionSuccess(position){
var lat = position.coords.latitude; //获取纬度
var lng = position.coords.longitude; //获取经度
/*
positiion对象比较少用到的属性
timestamp返回当前位置创建时间的时间戳
coords.accuracy 位置精度
coords.altitude 海拔,海平面以上以米计
coords.altitudeAccuracy 位置的海拔精度
coords.heading 方向,从正北开始以度计
coords.speed 速度,以米/每秒计
*/
alert( "您所在的位置: 纬度" + lat + ",经度" + lng );
if(typeof position.address !== "undefined"){ //判断是position对象是否有address属性,有则输出address信息
var country = position.address.country;
var province = position.address.region;
var city = position.address.city;
alert(' 您位于 ' + country + province + '省' + city +'市');
}
if(lat != '' && lng != ''){ //判断,如果经纬度不等于空则计算两个位置间的距离
alert(distance(lat,lng,23.137004,113.301858)+"米");
}
}
/*
失败后回调函数getPositionError(error),error为失败后返回信息
*/
function getPositionError(error){
/*
error.message为返回错误信息,建议自定义
error.code为返回错误提示码
*/
switch (error.code) {
case error.TIMEOUT:
alert("连接超时,请重试");
break;
case error.PERMISSION_DENIED:
alert("您拒绝了使用位置共享服务,查询已取消");
break;
case error.POSITION_UNAVAILABLE:
alert("获取位置信息失败");
break;
case error.UNKNOW_ERROR:
alert("其它错误");
break;
}
}
function distance(lat,lng,goalLat,goalLng){ //传入位置纬度,经度和目标纬度,经度,返回距离值,单位米,对地理感兴趣的童鞋可以去研究下计算公式
var EARTH_RADIUS = 6378.137;//地球赤道半径
if(lat != '' && lng != '' && goalLat != '' && goalLng != ''){
var radLat1 = rad(goalLat);
var radLat2 = rad(lat);
var a = radLat1 - radLat2;
var b = rad(goalLng) - rad(lng);
var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) +Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
s = s * EARTH_RADIUS;
s = Math.round(s * 10000) / 10000;
return s*1000;
}else{
return 0;
}
function rad(d){
return d * Math.PI / 180.0;
}
}
</script>
<!--
获取经纬度查询计算距离存在误差,现测试范围在100米以内,获取目标经纬度建议直接前往目标地点获取目标经纬度
使用地图获取经纬度可使用谷歌全球,经测试与本人机子GPS获取的经纬度误差最小
中国经度范围:73°33′E至135°05′E
中国纬度范围:3°51′N至53°33′N
计算公式,纬度在前经度在后
百度地图经纬度获取坑,经度放前面,纬度放后面
-->
<!--
经测试发现PC端浏览器无法获取经纬度,原因不明,正努力翻资料中,求解惑
-->
</body>
</html>
注:小疯纸的yy