### 使用定位服务
**HTML5中为我们提供了定位API能够让我们实现获取经纬度等位置信息。**
**可以通过**`navigator.geolocation`**来获取设备的当前位置,返回一个位置对象。**
> **我们主要使用**`getCurrentPosition()`**这个方法。**
> 使用方法`navigator.geolocation.getCurrentPosition(successCallback, [errorCallback] , [positionOptions]);`
successCallback返回一个地理数据对象position作为参数,该对象有属性timestamp和coords。timestamp表示该地理数据创建时间(时间戳);coords包括另外七个属性:
* coords.latitude:估计纬度
* coords.longitude:估计经度
* coords.altitude:估计高度
* coords.accuracy:所提供的以米为单位的经度和纬度估计的精确度
* coords.altitudeAccuracy:所提供的以米为单位的高度估计的精确度
* coords.heading: 宿主设备当前移动的角度方向,相对于正北方向顺时针计算
* coords.speed:以米每秒为单位的设备的当前对地速度
```
navigator.geolocation.getCurrentPosition(function(position){
var lat = position.coords.latitude;
var lon = position.coords.longtitude;
console.log(lat+" "+lon);
},
function(error){
console.log(error);
});
```
>好像尴尬了!HTML5的定位是去请求googleapis.com,可是国内的网络环境。。。
**所以,我们只能求助于百度地图了!**
首先要去百度开发者,注册应用
然后引入百度地图的js文件
```js
<script src="http://api.map.baidu.com/api?v=2.0&ak=y4ks32wpzCHXIl6HIbuQeHSbGPEE2gkF" type="text/javascript"></script>
```
使用百度地图提供的方法。
注意,getLocation的回调函数需要一定时间等待才被调用。
```js
var geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(function (r) {
if (this.getStatus() == BMAP_STATUS_SUCCESS) {
currentLat = r.point.lat;
currentLon = r.point.lng;
var pt = new BMap.Point(currentLon, currentLat);
var geoc = new BMap.Geocoder();
geoc.getLocation(pt, function (rs) {
var addComp = rs.addressComponents;
var city = addComp.city;
console.log(city);
//将城市后面的市去掉
console.log(city.slice(0,-1));
cityText = city.slice(0,-1);
var city = encodeURIComponent(cityText);
var key = 'f83bb390e68599c746b9124b7b21fbc8';
var url = "http://v.juhe.cn/weather/index?format=2&cityname="+city+"&key="+key;
getData(url);
})
};
});
```