地图服务

(一)选择位置提供器:

1、调用getProvider,并传递名称:

    LocationManager locationManager = (LocationManager)getSystemService(LocationManager.LOCATION_SERVICE) ;

    LocationProvider gpsProvider = locationManager.getProvider(providerName) ;

2、大部分都不可能显示的选择位置提供器,通常是指定要求,让Android确定使用最优技术:    

    Criteria criteria = new Criteria() ;

    criteria.setAccuracy(Criteria.ACCURACY_COARSE) ;

    criteria.setPowerRequirement(Crteria.POWER_LOW) ;

    criteria.setAltitudeRequired(flase) ;

    criteria.setBearingRequired(false) ;

    criteria.setSpeedRequired(false) ;

    criteria.setCostAllowed(true) ;

    String bestProvider = locationManager.getBestProvider(criteria) ;

如果有多个符合标准,返回精度最高的;如果没有满足的,按能耗、精度、返回能力放宽标准;如果不能找到,返回null。

 

(二)实时追踪移动

    1、创建监听器

    private final LocationListener locationListener = new LocationListener(){

public void onLocationChanged(Location location) {

                            //根据新的位置改变时触发

                        }    

public void onProviderDisabled(String provider) {

                            //禁用位置提供器时触发

                        }

public void onProviderEnabled(String provider) {

                            //启动了位置提供器时触发

                 }

public void onStatusChanged(String provider, int status, Bundle extras) {        

                            //提供器硬件状态发生改变时触发

                        }

        } ;

    2、调用方法添加监听器

    //provider:指定提供器名、t:更新最短时间、distance:更新最短距离:监听器

    locationManager.requestLocationUpdates(provider,t,distance,locationListener) ;

 

(三)邻近提醒

指定一个覆盖区域设置邻近提醒,设置选择中心点、距离半径、提醒的超时值,则不管移进/移出都会提醒。

1、使用PendingIntent指定触发的意图

2、使用LocationManager设置邻近提醒

    PendingIntent    pi = PendingIntent.getBroadcast(this,-1,(new Intent(ACTION)),0) ;

    //lat,lng:中心点坐标;radius:半径;expiration:过去值,-1为永不过期;pi:设定处理

    locationManager.addProximityAlert(lat,lng,radius,expiration,pi) ;

3、邻近提醒处理(存在一个key为LocationManager.KEY_PROXIMITY_ENTERING的值表示移入/移出(true/false)):

    boolean entering = getIntent().getBooleanExtra(LocationManager.KEY_PROXIMITY_ENTERING) ;

    //各项操作处理......


(四)地理编码器

ForWard Geocoding(前向地理编码):查找地址的经纬度;(getFromLocation)

Receverse Geocoding(反向地理编码:查找给定经纬度对应的街道地址。(getFromLocationName)

两种地理编码函数返回的都是一组Address对象列表(List<Address>);Address包含经纬度、电话号码、国家街道到门牌号等详细信息,需要Internet权限。

 

(五)地图活动

1、简介

    MapView:实际使用的MapView控件;

    MapActivity:新建活动的基础类,包含一个MapMap;

    Overlay:用来对地图做注释的类;

    MapController:用来控制地图;

    MyLocationOrlaye:特殊的覆盖,用来显示设备当前的位置和方向。

    ItemizedOrlays和OverlayeItems:结合使用创建地图标志图层,使用带文本的Drowable进行显示。

2、创建基于地图的活动

    使用uses-library标签包含需要的库:<uses-library android:name="com.google.android.maps" />

    需要INTERNET权限:<uses-permission android:name="android.permission.INTERNET">

    MapView控件只能在MapActivity扩展活动中使用。

    地图的对象表示为GeoPoint对象,包含了以micodegree为单位的经纬度(乘以100000即为microdegree单位)

    Double geoLat = location.getLatitude()*1E6 ;

    Double geoLng = location.getLongitude()*1E6 ;

    GeoPoint point = new GeoPoint(geoLat.intValue(),geoLng.intValue()) ;

    mapView.getController().animateTo(point) ;

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值