用户定位介绍及实例
1.UserLocation 1)获取用户的位置 2)追踪用户的移动 2.UserLocation的API LocationManager:管理用户定位服务 LocationProviders:其他的定位方式 定位的分类(前两者是主要的): a.GPS定位(精确) b.NETWORK定位(粗糙) c.passive(被动) 步骤: a.在主配置文件中声明相应的权限 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> b.获取LocationManager对象 c.选择LocationProvider d.绑定LocationListener对象 获得的是经纬度 location.getLongitude()//经度 location.getLatitude()//纬度 演示用DDMS来模拟 3.Criteria的使用(查找最好的定位方式) 设置一些列的查询条件,用于查找当前设备中符合条件的LocationProvider setAccuracy()//设置精度 setAltitudeRequired()//是否需要设置海拔 setBearingRequired()//是否需要设置速度 setCostAllowed()//设置是否产生费用 核心代码: /** * 生成一个Criteria对象 * 用于多条件查询 */ Criteria criteria = new Criteria(); /**设置查询的精度为高精度*/ criteria.setAccuracy(Criteria.ACCURACY_FINE); /**设置耗电量*/ criteria.setPowerRequirement(Criteria.POWER_LOW); /**设置是否需要海拔*/ criteria.setAltitudeRequired(false); /**设置是否需要速度*/ criteria.setSpeedRequired(false); /**设置是否需要收费*/ criteria.setCostAllowed(false); /** * false是不关乎是否有provider打开 * 只按条件查找最合适的 */ String provider = locationManager.getBestProvider(criteria,false); 4.Geocoding服务的介绍 1)主要提供的是两个功能: a.查询某地址的经纬度 b.查询某经纬度的具体地址 获得方式1:核心类GeoCoder 核心方法: getFromLocation() getFromLocationName() 获得方式2:实现用户定位的另外一种方式GeoCoding(从google官网获得) 基于web的GeoCoder,在google的API中可以直接查询,查询的格式是json 步骤: a.http://code.google.com/intl/zh-C ... entation/geocoding/ b.通过http请求也可以实现定位 地址解析请求(google网站上摘下的): Google Geocoding API 请求必须采用以下形式: http://maps.google.com/maps/api/geocode/output?parameters 其中,output 可以是以下值之一: json(建议)表示以 JavaScript 对象表示法 (JSON) 的形式输出 xml 表示以 XML 的形式输出 有些参数是必需的,有些是可选的。根据网址的标准,所有参数均使用字符 & (&) 分隔。下面枚举了这些参数及其可能的值。 Google Geocoding API 使用以下网址参数定义地址解析请求: address(必需)- 您要进行地址解析的地址。* 或者 latlng(必需)- 您希望获取的、距离最近的、可人工读取地址的纬度/经度文本值。* bounds(可选)- 要在其中更显著地偏移地址解析结果的可视区域的边框。(有关详细信息,请参见下文的可视区域偏向。) region(可选)- 区域代码,指定为 ccTLD(“顶级域”)双字符值。(有关详细信息,请参见下文的区域偏向。) language(可选)- 传回结果时所使用的语言。请参见支持的区域语言列表。请注意,我们会经常更新支持的语言,因此该列表可能并不详尽。如果未提供 language,地址解析器将尝试尽可能使用发送请求的区域的本地语言。 sensor(必需)- 指示地址解析请求是否来自装有位置传感器的设备。该值必须为 true 或 false。 请注意:您可以传递 address 或 latlng 进行查找。(如果传递 latlng,则地址解析器执行反向地址解析。有关详细信息,请参阅反向地址解析。) bounds 和 region 参数只会影响地址解析器返回的结果,但不能对其进行完全限制。 例如北京(输出如下): 方式1:json格式 比如:http://maps.google.com/maps/api/ ... NG&sensor=false { "results" : [ { "address_components" : [ { "long_name" : "北京", "short_name" : "北京", "types" : [ "locality", "political" ] }, { "long_name" : "北京市", "short_name" : "北京市", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "中国", "short_name" : "CN", "types" : [ "country", "political" ] } ], "formatted_address" : "中国北京市", "geometry" : { "bounds" : { "northeast" : { "lat" : 40.21649620, "lng" : 116.78298350 }, "southwest" : { "lat" : 39.66127140, "lng" : 116.01193430 } }, "location" : { "lat" : 39.9042140, "lng" : 116.4074130 }, "location_type" : "APPROXIMATE", "viewport" : { "northeast" : { "lat" : 40.21649620, "lng" : 116.78298350 }, "southwest" : { "lat" : 39.66127140, "lng" : 116.01193430 } } }, "types" : [ "locality", "political" ] } ], "status" : "OK" } 方式2:xml格式 <GeocodeResponse> <status>OK</status> <result> <type>locality</type> <type>political</type> <formatted_address>中国北京市</formatted_address> <address_component> <long_name>北京</long_name> <short_name>北京</short_name> <type>locality</type> <type>political</type> </address_component> <address_component> <long_name>北京市</long_name> <short_name>北京市</short_name> <type>administrative_area_level_1</type> <type>political</type> </address_component> <address_component> <long_name>中国</long_name> <short_name>CN</short_name> <type>country</type> <type>political</type> </address_component> <geometry> <location> <lat>39.9042140</lat> <lng>116.4074130</lng> </location> <location_type>APPROXIMATE</location_type> <viewport> <southwest> <lat>39.6612714</lat> <lng>116.0119343</lng> </southwest> <northeast> <lat>40.2164962</lat> <lng>116.7829835</lng> </northeast> </viewport> <bounds> <southwest> <lat>39.6612714</lat> <lng>116.0119343</lng> </southwest> <northeast> <lat>40.2164962</lat> <lng>116.7829835</lng> </northeast> </bounds> </geometry> </result> </GeocodeResponse> |