LBS--定位

LocationManager

Android 中一般有三种位置提供器可供选择,GPS_PROVIDER、NETWORK_PROVIDER、PASSIVE_PROVIDER。其中前两种使用的比较多,分别表示使用GPS定位和使用网络定位。这两种定位方式各有特点,GPS定位精度比较高,但是非常耗电,而网络定位的精确稍差,但耗电量比较少。

注意:

定位功能必须要由用户主动去启用才行,不然任何应用都无法获取到手机当前的位置信息。

LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
//将选择好的位置提供器传入到getLastKnownLocation()方法中,就可以得到一个Location对象。
String provider = LocationManager.NETWORK_PROVIDER;
Location location = locationManager.getLastKnownLocation(provider);
//这个Location 对象中包含了经度、纬度、海拔等一系列的位置信息,然后从中取出我们所关心的那部分数据即可。

//位置发生改变时
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10,new LocationListener() {
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }
    @Override
    public void onProviderEnabled(String provider) {
    }
    @Override
    public void onProviderDisabled(String provider) {
    }
    @Override
    public void onLocationChanged(Location location) {
    }
});
//关闭程序时,移除监听器
locationManager.removeUpdates(locationListener);

//requestLocationUpdates()方法接收四个参数,第一个参数是位置提供器的类型,第二个参数是监听位置变化的时间间隔,以毫秒为单位,第三个参数是监听位置变化的距离间隔,以米为单位,第四个参数则是LocationListener 监听器。

反地理编码

Geocoding API用法

其实Android本身就提供了地理编码的API,主要是使用GeoCoder这个类来实现的。它可以非常简单地完成正向和反向的地理编码功能,从而轻松地将一个经纬值转换成看得懂的位置信息。

不过,非常遗憾的是,GeoCoder 长期存在着一些较为严重的bug,在反向地理编码的时候会有一定的概率不能解析出位置的信息,这样就无法保证位置解析的稳定性,因此我们不得不去寻找GeoCoder 的替代方案。
还算比较幸运,谷歌又提供了一套Geocoding API,使用它的话也可以完成反向地理编码的工作,只不过它的用法稍微复杂了一些,但稳定性要比GeoCoder 强得多。

Geocoding API 中规定了很多接口,其中反向地理编码的接口如下:http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=true_or_false

sensor=true_or_false 表示这条请求是否来自于某个设备的位置传感器,通常指定成false 即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值