Android 定位
2014-04-29 16:51
204 查看
一 目前常用定位方式:
1GPS
GPS定位利用高空中的GPS卫星,向地面发射L波段的载频无线电测距信号,由地面上用户接收机实时地连续接受,并计算出接收机无线所在位置。GPS是获取室外环境信息的最常用方式。通过太空中的GPS卫星,地面的控制站和用户手中的GPS接收器,就能定位用户在地球上的位置和海拔坐标。接收的卫星越多,数据就越精确。GPS定位特点是精度高,耗电大,适合室外使用。
AndroidLocationManager服务提供了获取定位信息的方法。
mLocationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location location =mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
Location 里面就包含了经度,纬度等信息。
2 WIFI
通过WIFI信息进行定位,并不需要真正连接上指定的WIFI路由器,只需要探测到有WIFI存在即可,必须要拿到WIFI路由器的SSID和信号强度。定位前,客户端将扫描到的信号强度存储在服务器数据库上。定位时,将客户端采集到的信号强度与服务器已有的信号强度进行匹配,从而实现定位。
AndroidWifiManager 服务提供了相应的方法可以获取周边的wifi路由器信息,包括接入点地址,信号强度等。
WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);
List<ScanResult> scanList =wifiManager.getScanResults(); //获取周边路由器信息列表
把这些信息传服务器,服务器通过一定的算法或匹配规则,返回定位信息。
3 基站
基站定位是基于运营商的GSM网络(或其他电信运营商的网络)进行定位的。GSM网络的基础结构是由一系列的蜂窝基站构成的,这些蜂窝基站把整个通信区域划分成一个个蜂窝小区,每个基站都有一个唯一的cellId。一般有几种方法,第一种是利用手机附近的三个基站进行三角定位,由于每个基站的位置是固定的,利用电磁波在这三个基站间中转所需要时间来算出手机所在的坐标;第二种则是利用获取最近的基站的信息,其中包括cell id,location area code、mobile country code、mobile network
code和信号强度。将这些数据发送到google的定位web服务里,就能拿到当前所在的位置信息。
AndroidTelephonyManager 服务提供了相应的方法获取周边的基站信息。
TelephonyManager telephonyManager =(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
List<NeighboringCellInfo> infoList =telephonyManager.getNeighboringCellInfo();//获取周边基站信息列表
二 关于定位的一些想法
1 控制GPS 定位频率, GPS定位相对来说耗电量比较大,需要做适当的缓存。在满足需求的情况下,尽量加大定位时间间隔。
2 定位作为公用模块,代码应该尽量内聚,减小模块间耦合。
3 定位功能该如何测试,由于地理位置限制,目前测试还仅限于通过观察日志,无法模拟实际定位场景。这样测试有可能遗漏。本想通过模拟gps位置来测试,但是基站信息和wifi信息不好模拟。一个不错的办法是定位结合GPS 和 网络信息,这样可以通过mock 基站和wifi信息的http请求来测试客户端功能。
1GPS
GPS定位利用高空中的GPS卫星,向地面发射L波段的载频无线电测距信号,由地面上用户接收机实时地连续接受,并计算出接收机无线所在位置。GPS是获取室外环境信息的最常用方式。通过太空中的GPS卫星,地面的控制站和用户手中的GPS接收器,就能定位用户在地球上的位置和海拔坐标。接收的卫星越多,数据就越精确。GPS定位特点是精度高,耗电大,适合室外使用。
AndroidLocationManager服务提供了获取定位信息的方法。
mLocationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location location =mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
Location 里面就包含了经度,纬度等信息。
2 WIFI
通过WIFI信息进行定位,并不需要真正连接上指定的WIFI路由器,只需要探测到有WIFI存在即可,必须要拿到WIFI路由器的SSID和信号强度。定位前,客户端将扫描到的信号强度存储在服务器数据库上。定位时,将客户端采集到的信号强度与服务器已有的信号强度进行匹配,从而实现定位。
AndroidWifiManager 服务提供了相应的方法可以获取周边的wifi路由器信息,包括接入点地址,信号强度等。
WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);
List<ScanResult> scanList =wifiManager.getScanResults(); //获取周边路由器信息列表
把这些信息传服务器,服务器通过一定的算法或匹配规则,返回定位信息。
3 基站
基站定位是基于运营商的GSM网络(或其他电信运营商的网络)进行定位的。GSM网络的基础结构是由一系列的蜂窝基站构成的,这些蜂窝基站把整个通信区域划分成一个个蜂窝小区,每个基站都有一个唯一的cellId。一般有几种方法,第一种是利用手机附近的三个基站进行三角定位,由于每个基站的位置是固定的,利用电磁波在这三个基站间中转所需要时间来算出手机所在的坐标;第二种则是利用获取最近的基站的信息,其中包括cell id,location area code、mobile country code、mobile network
code和信号强度。将这些数据发送到google的定位web服务里,就能拿到当前所在的位置信息。
AndroidTelephonyManager 服务提供了相应的方法获取周边的基站信息。
TelephonyManager telephonyManager =(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
List<NeighboringCellInfo> infoList =telephonyManager.getNeighboringCellInfo();//获取周边基站信息列表
二 关于定位的一些想法
1 控制GPS 定位频率, GPS定位相对来说耗电量比较大,需要做适当的缓存。在满足需求的情况下,尽量加大定位时间间隔。
2 定位作为公用模块,代码应该尽量内聚,减小模块间耦合。
3 定位功能该如何测试,由于地理位置限制,目前测试还仅限于通过观察日志,无法模拟实际定位场景。这样测试有可能遗漏。本想通过模拟gps位置来测试,但是基站信息和wifi信息不好模拟。一个不错的办法是定位结合GPS 和 网络信息,这样可以通过mock 基站和wifi信息的http请求来测试客户端功能。
相关文章推荐
- Android定位当前城市的实现
- Android百度地图定位后获取周边位置的实现代码
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
- Android开发 百度地图开发(定位、传感器应用)
- Android - 位置定位(Location)服务(Service)类的基本操作
- Android基本功:根据GPS信息在地图上定位
- 利用Android的崩溃日志来定位问题
- android 腾讯X5webview里HTML5的地理位置定位
- android:程序无响应,你该如何定位问题?
- Android GPS定位简单实例
- android 快速定位内存泄露位置技巧
- Android那些事儿之LBS定位
- Android百度地图定位sdk 类方法参数、定位原理详细介绍
- android 百度SDK定位
- Android GPS 定位的实现(1)
- Android百度地图开发(二)定位之自动定位及标注(及定位几日内瓦或坐标4.9E-324问题)
- android 百度地图使用tabhost 无法定位,解决办法
- Android引导页——可跟踪定位的引导页协调器
- android 4种定位原理及实现——1
- android 三种定位方式