获取当前经纬度

利用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. Quartus II 使用 modelsim 仿真

    转自:http://www.cnblogs.com/emouse/archive/2012/07/08/2581223.html Quartus 中调用modelsim的流程 1. 设定仿真工具 as ...

  2. JAVA 字符串索引

    String类的substring()方法   截取字符串,在java语言中的用法 1.  public String substring(int beginIndex) 返回一个新字符串,它是此字符 ...

  3. Quartz特点

    运行环境 Quartz 可以运行嵌入在另一个独立式应用程序 Quartz 可以在应用程序服务器(或servlet容器)内被实例化,并且参与XA事务 Quartz 可以作为一个独立的程序运行(其自己的J ...

  4. opencv 图像细化

    图像细化多用于机器人视觉,OCR字符识别等领域,细化后的图像经过去毛刺就成为了我们常说的图像的骨架. 该图像细化代码依据论文: T. Y. ZHANG and C. Y. SUEN  A Fast P ...

  5. 笔记-Linux包管理命令

    一.apt, apt-get, dpkg命令 apt-get是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索.安装.升级.卸载软件或操作系统.使用apt-ge ...

  6. CentOS7.6安装Go-1.12.9

    安装步骤 Go的官网:https://golang.google.cn 1. 下载压缩包 wget https://dl.google.com/go/go1.12.9.linux-amd64.tar. ...

  7. Ubuntu 18.04 切换使用Python3

    我安装的Ubuntu 默认的python是2.7.5 python -V 我参考网上照到的文章,如果需要默认python为 python3 python命令默认是 python 3 sudo cp / ...

  8. PS安装失败解决方法

    清除Adobe软件卸载残余文件 ,使用下面的工具,可以清除残余文件,然后再次安装 链接: https://pan.baidu.com/s/1OfIDnjpmqw34dWQ8LH6fIQ 提取码: b7 ...

  9. Json数据交换一Gson

    Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库.可以将一个 JSON 字符串转成一个 Java 对象,或者反过来. 添加依赖 <depe ...

  10. delphi中TreeView使用(转)

    delphi中TreeView使用(1) TreeView由节点构成,建树通过对TreeView.items属性进行操作.Items是一个TTreeNodes对象,这是一个TTreeNode集. 一. ...