获取指定经纬度及当前位置经纬度,并计算两个位置之间的距离
来源:互联网 发布:熟悉免费物流软件 编辑:程序博客网 时间:2024/05/17 17:18
利用百度地图api和geolocation获取浏览器地理位置并计算位置距离
1、通过百度地图api获取浏览器经纬度
引入百度地图api(需申请获取ak)
引入文件
<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.5&ak=申请获取"></script><script type="text/javascript" src="http://api.map.baidu.com/library/MarkerTool/1.2/src/MarkerTool_min.js"></script><script src="http://libs.baidu.com/jquery/1.8.3/jquery.min.js"></script>js部分 <script type="text/javascript"> var map = new BMap.Map("container"); map.centerAndZoom("武汉",13); map.addControl(new BMap.NavigationControl()); map.addControl(new BMap.ScaleControl()); map.addControl(new BMap.OverviewMapControl()); map.enableScrollWheelZoom(); map.disableDoubleClickZoom(); map.addControl(new BMap.MapTypeControl()); var lastm = null; function addmark(m) { if (lastm != null) { map.removeControl(lastm); } lastm = m; m.enableDragging(); var la = new BMap.Label("点击保存"); la.addEventListener("click", function (e) { map.removeEventListener("click", mapclick); setTimeout(function () { map.addEventListener("click", mapclick,false); }, 10); m.addEventListener("dragend",uppoint); var pp = m.getPosition(); top.setpoint(pp.lng, pp.lat); return; //top.art lastm1=m; var boxhtml = "<div id=\"box\">" + "<form method=\"post\" onsubmit='return submitform(this);'>" + "<h4>添加坐标信息<\/h4>" + "<p><span>坐标:<\/span><input name=\"point\" id=\"point\" value=\"" + pp.lng + "," + pp.lat + "\" style=\"width:200px;\"/><\/p>" + "<p id=\"p_sub\"><input type=\"submit\" value=\"确定\" \/><input type=\"reset\" value=\"清除\" \/><\/p>" + "<\/form>" + "<\/div>"; lastm.openInfoWindow(new BMap.InfoWindow(boxhtml)); }); la.setStyle({ padding: "5px","max-width":"100px" }); la.setOffset(new BMap.Size(23, 0)); m.setLabel(la); } (function(){ var str = top.point; if(str=="")return; var pp = new RegExp("([\\d\.]+),([\\d\.]+)").exec(str); var point=new BMap.Point(pp[1], pp[2]); var m = new BMap.Marker(point); map.addOverlay(m); addmark(m); })(); function mapclick(e) { var m = new BMap.Marker(e.point); map.addOverlay(m); addmark(m); } map.addEventListener("click", mapclick); var myPushpin = new BMapLib.MarkerTool(map, { autoClose: false, followText: "放到选定的位置,可以拖动" }); myPushpin.addEventListener("markend", function (e) { addmark(e.marker); myPushpin.close(); }); document.getElementById("djdiv").onclick = function (e) { myPushpin.open(); } var local = new BMap.LocalSearch(map, { renderOptions: { map: map } }); function search_map() { local.search($("#xx").val()); } function uppoint(){ if($("#point").length==0)return; var pp = lastm1.getPosition(); $("#point").val( pp.lng + "," + pp.lat ); } $(function () { $("#xx").keyup(function (event) { if (event.keyCode == 13) { $("#btn_search").click(); } }); $("#container").on("blur", "#point", function (event) { var pp = new RegExp("([\\d\.]+),([\\d\.]+)").exec($("#point").val()); if (pp != null) { var myPoint = new BMap.Point(pp[1], pp[2]); lastm1.setPosition(myPoint); map.panTo(myPoint); } else alert($("#point").val()) }); }); function submitform(ff) { var xx = $(ff).serialize(); }</script>2.获取浏览当前位置经纬度
<script type="text/javascript">//获取位置 var longitude = 0; var latitude = 0; $(document).on('click', '.getLocation', function (){ var options = { enableHighAccuracy : true, maximumAge : 1000 }; if(navigator.geolocation) { //浏览器支持geolocation navigator.geolocation.getCurrentPosition(onSuccess,onError,options); } }); //成功时 function onSuccess(position){ //经度 longitude = position.coords.longitude; //纬度 latitude = position.coords.latitude; document.getElementById('lng1').value = longitude; document.getElementById('lat1').value = latitude; //alert(longitude); //$("#lng1").html(longitude); //$("#lat1").html(latitude); } //失败时 function onError(error){ switch(error.code){ case 1: alert("位置服务被拒绝"); break; case 2: alert("暂时获取不到位置信息"); break; case 3: alert("获取信息超时"); break; case 4: alert("未知错误,位置获取失败"); break; } }
3.通过获取的经纬度位置信息,计算距离
* 计算两组经纬度坐标之间的距离 * @param $lat1 纬度1 * @param $lng1 经度1 * @param $lat2 纬度2 * @param $lng2 经度2 * @param int $len_type 返回值类型(1-m 2-km) * @param int $decimal 保留小数位数 * @return float */function getDistance($lat1, $lng1, $lat2, $lng2, $len_type = 2, $decimal = 2){ $radLat1 = $lat1 * 3.1415926 / 180.0; $radLat2 = $lat2 * 3.1415926 / 180.0; $a = $radLat1 - $radLat2; $b = ($lng1 * 3.1415926 / 180.0) - ($lng2 * 3.1415926 / 180.0); $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))); $s = $s * 6378.137; $s = round($s * 1000); if ($len_type > 1) { $s /= 1000; } return round($s, $decimal);}//计算距离, $distance = getDistance($longitude,$latitude,$longitude1,$latitude1); echo '距离目的地:'.$distance.'km';
完整演示下载代码在php环境下测试
补上百度云地址
链接:http://pan.baidu.com/s/1kVEw2SB 密码:bhc9
0 0
- 获取指定经纬度及当前位置经纬度,并计算两个位置之间的距离
- 计算两个经纬度之间的距离
- 怎么计算两个经纬度之间的距离
- 计算两个经纬度之间的距离
- 计算两个经纬度之间的距离
- 计算两个经纬度之间的距离
- 通过经纬度计算两个之间的距离
- PHP计算两个经纬度之间的距离
- 计算两个经纬度之间的距离
- 计算两个经纬度之间的距离
- 怎么计算两个经纬度之间的距离
- PHP计算两个经纬度之间的距离
- 计算两个经纬度之间的距离
- JAVA计算两个经纬度之间的距离
- 计算两个经纬度之间的距离
- 计算两个经纬度之间的直线距离
- 两个经纬度之间的距离计算
- PHP计算两个经纬度之间的距离
- C3P0连接池配置
- 【NOIP2016提高A组集训第13场11.11】字符串
- Hive数据仓库--HiveUDF异常解析与其中的坑
- 微信JSAPI开发教程准备工作绑定域名【第一课】
- Onvif2.6.1命名空间前缀对照
- 获取指定经纬度及当前位置经纬度,并计算两个位置之间的距离
- Netty4.1.X zero copy
- Hadoop家族学习路线图
- mac 下安装mysql-5.7.16-osx10.11-x86_64
- Linux编程Shell脚本执行方法
- Java学习路线图
- WinCE下USB串口功能实现
- 帧间预测:视频内容与最佳预测模式之间的关系(总结)
- Android多种进度条使用详解