方法一:html5原生提供的定位:javascript
讲解:在支持HTML5的浏览器下,navigator对象下有一个属性----geolocation,而geolocation属性又有个方法getCurrentPosition(回调函数1,回调函数2)能够经过浏览器向设备发起定位请求,浏览器就会让设备发送相关指令到附近上网设备,上网设备返回定位信息给用户设备,浏览器就得到了用户位置。
当浏览器得到定位信息成功,则navigator.geolocation.getCurrentPosition(回调函数1,回调函数2); 中的回调函数1执行,若是定位失败,则回调函数2执行。
若定位成功,则自动把定位结果对象做为参数传递给回调函数1,。 若定位失败,则自动把错误对象传递给回调函数2. 因此在回调函数2中可经过error.code 获取到错误码。(假设形参名为error)。
以下代码就是用HTML5获取定位信息,并把成功定位交给showPosition处理,把错误定位交给showError处理。php
eg:css
if(navigator.geolocation){ navigator.geolocation.getCurrentPosition(showPosition,showError); }else{ alert(Geolocation is not supported by this browser); } //浏览器不支持HTML5.
详细代码:html
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <style type="text/css"> *{ height: 100%; //设置高度,否则会显示不出来 } </style> <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script> <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=··············"></script> <script type="text/javascript" src="http://developer.baidu.com/map/jsdemo/demo/convertor.js"></script> <script> $(function(){ navigator.geolocation.getCurrentPosition(translatePoint); //定位 }); function translatePoint(position){ var currentLat = position.coords.latitude; var currentLon = position.coords.longitude; var gpsPoint = new BMap.Point(currentLon, currentLat); BMap.Convertor.translate(gpsPoint, 0, initMap); //转换坐标:gpsPoint:转换前坐标,第二个参数为转换方法,0表示gps坐标转换成百度坐标,callback回调函数,参数为新坐标点 } function initMap(point){ //初始化地图 map = new BMap.Map("map"); map.addControl(new BMap.NavigationControl()); map.addControl(new BMap.ScaleControl()); map.addControl(new BMap.OverviewMapControl()); map.centerAndZoom(point, 15); map.addOverlay(new BMap.Marker(point)) } </script> </head> <body> <div id="map"></div> </body> </html>
注释:html5
这是由于htm5 的 getCurrentPosition 获取到的坐标是 GPS 经纬度坐标,而百度地图的坐标是通过特殊转换的,因此,在获取定位坐标和初始化地图之间须要进行一步坐标转换工做,该转换方法百度API里面已经提供了,转换一个点或者批量装换的方法均有提供:单个点转换需引用 http://developer.baidu.com/map/jsdemo/demo/convertor.js,批量转换需引用 http://developer.baidu.com/map/jsdemo/demo/changeMore.js,这里只须要前者便可: java
方法二:百度地图提供的APIjquery
(1)经过浏览器定位:git
<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="http://api.map.baidu.com/api?v=2.0&ak=您的密钥"></script> <title>浏览器定位</title> <script async src="http://c.cnzz.com/core.php"></script></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 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()); } },{enableHighAccuracy: true}) //关于状态码 //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>
(2)经过ip定位:web
<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="http://api.map.baidu.com/api?v=2.0&ak=您的密钥"></script> <title>IP定位获取当前城市</title> <script async src="http://c.cnzz.com/core.php"></script></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); function myFun(result){ var cityName = result.name; map.setCenter(cityName); alert("当前定位城市:"+cityName); } var myCity = new BMap.LocalCity(); myCity.get(myFun); </script>
百度地图Api:api
//让全部点在视野范围内 pointArray:点集合 map.setViewport(pointArray); //清除全部点集合 map.clearOverlays();
注释:
百度地图开放平台:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding
百度地图生成器:http://api.map.baidu.com/lbsapi/creatmap/index.html
http://developer.baidu.com/map/jsdemo.htm#i8_2
申请百度地图API密匙步骤:http://jingyan.baidu.com/article/363872eccda8286e4aa16f4e.html
百度地图 地名 转换成经纬度 参考文章:http://www.jb51.net/article/58396.htm
方法三:高德地图定位:
地址:http://lbs.amap.com/api/javascript-api/example/map/map-show/
你们本身去查看
参考:http://blog.csdn.net/suixufeng/article/details/13511761
http://www.jb51.net/html5/208408.html
http://blog.csdn.net/xmtblog/article/details/45093661