Android 定位
2014-04-10 13:58
218 查看
这几天系统看了下android 定位相关的资料,现将相关内容总结如下:
一 目前常用定位方式:
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调用百度地图API实现——实时定位代码
- Android之GPS定位详解
- 百度map android sdk3.5实现定位 并跳转的指定坐标,加入标记
- Android惯性导航定位
- Android使用百度地图定位(获取当前经纬度和地址信息)
- Android百度地图定位
- Android应用中使用百度地图API定位自己的位置(二)
- Arcgis for Android解决定位结果与地图偏移的简单处理思维
- android 获取GPS定位(原文地址)
- android百度地图开发之自动定位所在位置与固定位置进行驾车,步行,公交路线搜索
- Android定位的实现
- Android之GPS定位详解
- Android - Tombstone crash + Android Tombstone/Crash的log分析和定位
- Android开发之定位
- 快速定位解决Android内存泄漏
- android中一些view处理(拖动,定位,显示,图层)
- Android位置服务--用户定位Location
- Android使用腾讯定位SDK显示当前地址
- android 基站定位 wifi定位
- 在Android里完美实现基站和WIFI定位