高德地图api之location定位服务

来源:互联网 发布:ubuntu无法复制粘贴 编辑:程序博客网 时间:2024/05/20 13:15

除了basic map外,高德地图api还提供了定位服务,兴趣点搜索服务,路线查找服务,离线地图服务。

现在我们看一下api中如何使用AMaplocation定位服务:

其实在android api中已经提供了android.location package,但是AMap的api提供了一个MapLocationApi.jar包,其中的定位服务基本一样,其中有几个重要的类:AMapLocation,AMapLocationListener,LocationManagerProxy,LocationProviderProxy

与 android自带的Location服务一样,AMapLocationManagerProxy类是Location服务的关键类,其意思就是Location服务的管理,而LocationProviderProxy类就是Location服务的提供者,而AMapLocation就是Location服务的实现形式,AMapLocationListener就是Location的监听器。


》Fisrtly,我们来看怎样实现GPS定位:

第一步:定义一个LocationManagerProxy类的对象,由LocationProviderPRoxy不断请求获得AMapLocation

locationManager = LocationManagerProxy.getInstance(this);

// Location API定位采用GPS定位方式,时间最短是5000毫秒

locationManager.requestLocationUpdates(

LocationManagerProxy.GPS_PROVIDER, 5000, 10, AMapLocationListener);

第二步:

对获得AMapLocation进行事件处理,重写AMapLocationListener的四个方法:

@Override

public void onLocationChanged(Location location) {


}

@Override

public void onProviderDisabled(String provider) {


}

@Override

public void onProviderEnabled(String provider) {


}

@Override

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

}

/**

* 过滤gps定位返回的数据

*/

@Override

public void onLocationChanged(AMapLocation location) {

if (location !=null) {

Double geoLat = location.getLatitude();

Double geoLng = location.getLongitude();

String str = ("定位成功:(" + geoLng +"," + geoLat +")"

+ "\n精    度    :" + location.getAccuracy() +"米"

+ "\n定位方式:" + location.getProvider() +"\n定位时间:" + AMapUtil

.convertToTime(location.getTime()));

Message msg = new Message();

msg.obj = str;

if (handler !=null) {

handler.sendMessage(msg);

}

}

}

ps:在重写的方法中我们定义了获得Location之后要做的事,这里就是在一个TextView中显示出来。

第三步:

在Activity的onPause()和onDestroy()中注销掉LocationManagerProxy和它的请求。

locationManager.removeUpdates(this);

locationManager.destory();



使用过andorid自带的Location服务就知道Location服务的提供者Provider有好几个值,除了GPS定位之外还有wifi定位,由于AMap中GPS默认是开启的,所以我们使用AMapLocationProxy.AMapNetwork这个Provier是就可以实现混合定位,这样就可以全面获得定位服务,获得了定位Location之后,当然要将其显示在AMap上。

》如何将定位信息显示在AMap上:

将定位服务和AMap服务集成在一起,就可以在地图上显示自己的定位:

第一步:定义AMapLocationProxy类通过AMapLocationProviderProxy获得Location服务,重写AMapLocationListener的五个方法;

第二步:设置地图上的LocationButton能响应点击事件,对点击事件设置定位地点LocationSource,

LocationSouce是com.amp.api.maps中的一个接口类,其中有一个监听器OnLocationChangeListener。

aMap.setLocationSource(LocationSource);

aMap.setMyLocationEnabled(true);

第三步:重写LocationSource的两个方法,目的是是让地图显示定位地点。

@Override

public void activate(OnLocationChangedListener listener) {

mListener = listener;

if (mAMapLocationManager ==null) {

mAMapLocationManager = LocationManagerProxy.getInstance(this);

}

/*

* mAMapLocManager.setGpsEnable(false);//

* 1.0.2版本新增方法,设置true表示混合定位中包含gps定位,false表示纯网络定位,默认是true

*/

// Location API定位采用GPS和网络混合定位方式,时间最短是5000毫秒

mAMapLocationManager.requestLocationUpdates(

LocationProviderProxy.AMapNetwork, 5000, 10,this);

}

@Override

public void deactivate() {

mListener =null;

if (mAMapLocationManager !=null) {

mAMapLocationManager.removeUpdates(this);

mAMapLocationManager.destory();

}

mAMapLocationManager =null;

}

第四步:注销掉获得的AMapLocationMangerProxy及其获得的服务。



原创粉丝点击