获取当前经纬度

利用HTML5(以及基于JavaScript的地理定位API),可以很容易地在页面中访问位置信息,下面代码,就可以简单的获取当前位置信息:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>获取当前位置</title>
</head>
<body>
<div id="location">
你的位置将显示在这
</div>
<div id="distance">
这是用来放距离的
</div>
<div id="map" style="width: 500px; height: 500px">
这是用来放地图的
</div>
<script>
/* 一旦浏览器加载页面,我们将调用函数getMyLocation */
window.onload = getMyLocation;
function getMyLocation() {
/* 利用这个检查来确保浏览器支持地理定位API。如果navigator.geolocation对象存在,说明浏览器支持这个API */
if (navigator.geolocation) {
/* 如果浏览器支持这个API,则调用getCurrentPosition方法,并传入一个处理函数displayLocation. */
navigator.geolocation.getCurrentPosition(displayLocation,,displayError);
}else{
/* 不支持地理定位时弹出提醒 */
alert("你的浏览器不支持地理定位")
}
} /* 这个就是处理函数,浏览器得到一个位置时就会调用这个函数 */
function displayLocation(position){
/* 从position.coords对象得到位置的维度和经度 */
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
var div = document.getElementById("location");
/* 使用innerHTML将位置信息插入location<div>中 */
div.innerHTML = "你的维度为:"+latitude+"<br/>"+"你的经度为:"+longitude;
}
</script>
</body>
</html>

用到地理定位时,并不是每次都能成功,所以可以创建一个小的诊断测试。

需要申明的是getCurrentPosition可以接收三个参数navigator.geolocation.getCurrentPosition(displaySuccess,displayError, options),其中成功回调,和失败回调是可选的。

在这里我们的诊断测试用的了失败回调函数,失败时调用displayError。

navigator.geolocation.getCurrentPosition(displayLocation,displayError )

现在要编写错误处理程序,geolocation将会向你的处理程序传入一个error对象,其中包含一个数值码,描述了它未能确定浏览器位置的原因。根据这个数值码还可以提供一个消息,包含有关这个错误的更多信息。

function displayError(error) {
errorTypes = {
0:"未知错误", /* 如果其他类型错误都不合适就会使用这个错误 */
1:"用户拒绝使用定位", /* 你自己拒绝使用地理定位 */
2:"位置不存在", /* 浏览器已经尽力了,但还是没能获取到你的位置 */
3:"超时" /* 地理请求有一个内部超时设置,如果超出时间却还没有确定位置就好报出这个错误 */
}
var errorMessage = errorTypes[error.code];
if (errorTypes == 0 || errorTypes ==2) {
errorMessage = errorMessage+" "+error.message;
}
var div = document.getElementById("location");
div.innerHTML = errorMessage;
}

在百度地图上显示你的位置

获取到经纬度之后往往需要在地图上显示出来,这里调用百度地图,调用地图需要使用该公司的API接口,因此引入百度地图API接口。

<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=密钥"></script>

密钥得自己去百度地图开发平台申请,不做商业用途不收费。

引入后在上面的displayLocation函数中增加下面代码:

    var bdPoint = new BMap.Point(longitude,latitude);
var bm = new BMap.Map("map");
bm.centerAndZoom(bdPoint,15);
/* 添加位置标记 */
var markergg = new BMap.Marker(bdPoint);
bm.addOverlay(markergg);

便可得到如下地图,不过需要注意的是,台式浏览器上往往不能得到精确的位置,因为大多是根据ip来定位的,而且许多浏览器默认都禁止使用地理定位,不过使用新版的IE倒是可以。笔记本上有定位功能的开启后就较为精确,在有GPS的手机上,定位就更精确了。

以上地图来自台式电脑定位,误差很大。更多关于地图的操作可参考百度地图web开发API文档.

计算你和别人之间的距离

在实际运用中,知道了自己的位置,知道了别人的位置,往往需要计算两个位置之间的距离。

因此接下来计算两点距离,要计算两个坐标之间的距离,基本都会用半正失公式,如下:

function computeDistance(startCoords,destCoords){
var startLatRads=degreesToRadians(startCoords.latitude);
var startLongRade=degreesToRadians(startCoords.longitude);
var destLatRads=degreesToRadians(destCoords.latitude);
var destLongRads=degreesToRadians(destCoords.longitude);
var Radius=6371;
var distance=Math.acos(Math.sin(startLatRads)*Math.sin(destLatRads)+Math.cos(startLatRads)*Math.cos(destLatRads)*Math.cos(startLongRade-destLongRads))*Radius;
return distance;
} function degreesToRadians(degrees){
var radians=(degrees*Math.PI)/180;
return radians;
}

以及对方的经纬度,这里随便写了一个

var ourCoords={
latitude:30.2526,
longitude:120.1656
};

然后还是在之前的displayLocation函数中继续增加下面代码:

/* 计算两点之间的距离 */
var km=computeDistance(position.coords,ourCoords);
var distance=document.getElementById("distance");
distance.innerHTML="你的位置距离纬度为:"+ourCoords.latitude+"<br/>"+"经度为:"+ourCoords.longitude+"<br/>"+"的距离为"+km+"km";

这样就可以得到两点之间的距离,我得到的是:

补充

在iOS10 以上苹果对webkit定位权限进行了修改,所有定位请求的页面必须是https协议的。在http协议下通过html5原生定位接口会返回错误,无法正常定位。

geolocation获取当前位置显示及计算两地距离的更多相关文章

  1. 【微信开发】微信小程序通过经纬度计算两地距离php代码实现

    需求: 要求做个根据用户当前位置获取周围商家地址,并且按照由近到远排序, 方法一: 代码层实现 封装方法: /** * @desc 根据两点间的经纬度计算距离 * @param float $lat ...

  2. Geohash-》通过经纬度计算两地距离的函数

    /**      * 根据起点坐标和终点坐标测距离      * @param  [array]   $from  [起点坐标(经纬度),例如:array(118.012951,36.810024)] ...

  3. java计算两地距离(公里)

    //目标经度,目标纬度,自己经度,自己纬度 public static double getDistance(double lon1, double lat1, double lon2, double ...

  4. html5定位获取当前位置并在百度地图上显示

    用html5的地理定位功能通过手机定位获取当前位置并在地图上居中显示出来,下面是百度地图API的使用过程,有需要的朋友可以参考下 在开发移动端 web 或者webapp时,使用百度地图 API 的过程 ...

  5. Html5 Geolocation获取地理位置信息(转)

    Html5中提供了地理位置信息的API,通过浏览器来获取用户当前位置.基于此特性可以开发基于位置的服务应用.在获取地理位置信息前,首先浏览器都会向用户询问是否愿意共享其位置信息,待用户同意后才能使用. ...

  6. javascript:与获取鼠标位置有关的属性

    javascript并没有mouse对象,获取鼠标坐标要靠强大的event对象。 我们通过监听document的mousemove,就可以实时获得鼠标位置。 但是!!event中和鼠标相关的属性太多了 ...

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

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

  8. uni-app获取当前位置

    uniapp获取当前城市: 官方api:uni.getLocation()获取当前的地理位置.速度. 在微信小程序中,当用户离开应用后,此接口无法调用,除非申请后台持续定位权限:当用户点击“显示在聊天 ...

  9. Uwp Windows10获取设备位置(经纬度)

    先在Package.appxmanifest中配置位置权限 2. 创建LocationManager类 using System; using System.Collections.Generic; ...

随机推荐

  1. 非JAVA客户端与mina使用 PrefixedStringCodecFactory 通讯

    与C++,C#不同,java的写入字节顺序是从高到低(左低到右高) 例如 内存数据:{ 0x67,0x45,0x23,0x01} ,java int值是:0x6745231  而C++是:0x1234 ...

  2. MySQL数据库_目录

    MySQL数据库初识 MySQL的库表详细操作 MySQL行(记录)的详细操作 MySQL之单表查询 MySQL之多表查询 Navicat工具.pymysql模块 MySQL之视图.触发器.事务.存储 ...

  3. 并发编程(六)——进程/线程池、协程、gevent第三方库

    进程/线程池.协程.gevent第三方库 一.进程/线程池 1.进程池 (1)什么是进程池 如果需要创建的子进程数量不大,可以直接利用multiprocess中的Process来创建.但是当需要创建上 ...

  4. Java传输对象模式

    当我们想要在客户端到服务器的一个传递具有多个属性的数据时,可使用传输对象模式.传输对象也称为值对象.传输对象是一个具有getter/setter方法的简单POJO类,并且是可序列化的,因此可以通过网络 ...

  5. k8s 命令

    Kubernetes 常用安装和使用命令总结 获取所有命名空间上的pod kubectl get pod -o wide --all-namespaces 查看pod IP时使用 kubectl ge ...

  6. tomcat 端口被占用 项目端口号被占用怎么解决

    1.Win+R  打开运行 ,输入cmd 打开命令行窗口 . 2.假设要查询端口被占用情况,在命令行下输入:netstat  -aon|findstr  "8883" 3.得到进程 ...

  7. Zabbix-server及zabbix-web安装手册(centos7)

    注:本实验环境在centos7mini下实验,具体相关软件版本最好一致,避免依赖关系缺失. 当然也可以新建用户zabbix(不使用root,避免安全隐患),在zabbix下执行操作,加sudo提升权限 ...

  8. 安装memcached报错:If it's already installed, specify its path using --with-libevent=/dir/

    一.安装memcached,执行./configure --prefix=/usr/local/memcached时候报错: 问题:If it's already installed, specify ...

  9. protobuf3的学习笔记

    学习protobuf的过程中踩了不少的坑,这篇博文算是一个小结吧! 环境: windows VisualStudio Google.Protobuf.Tools. Google.Protobuf. 其 ...

  10. kafka-manager监控工具的安装和使用

    kafka-manager监控工具的使用 第一步:对kafkamanager进行下载并编译 此步骤略:可参照成功与否不详,https://www.jianshu.com/p/174b6eb10d9d ...