android地图入门,Android 高德地图入门详解

效果图:

0818b9ca8b590ca3270a3433284dd417.png

教程:

由于官网的教程不是很详细,相信很多小白们有点看不懂,比如我,看的都是一脸懵逼,相比较而言,百度地图的教程要更详细一点!推荐新手先拿百度教程来练练手,熟悉下地图的业务逻辑,地图类逻辑都差不多,好了不多说,开始正文。

首先,去高德官网下载所需的地图库并申请key,附:http://lbs.amap.com/

下载的jar包导入到as里面,然后配置清单文件:

权限:

在xml布局文件中引用地图控件:

android:id="@+id/map"

android:layout_width="match_parent"

android:layout_height="match_parent" />

在activity中引用:

//获取地图控件引用

mMapView = (MapView) findViewById(R.id.map);

//在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),实现地图生命周期管理

mMapView.onCreate(savedInstanceState);

if (aMap == null) {

aMap = mMapView.getMap();

//UiSettings 主要是对地图上的控件的管理,比如指南针、logo位置(不能隐藏).....

UiSettings settings = aMap.getUiSettings();

//设置了定位的监听,这里要实现LocationSource接口

aMap.setLocationSource(this);

// 是否显示定位按钮(据我所知不能更改,知道的麻烦告我一声)

settings.setMyLocationButtonEnabled(true);

//添加指南针

//settings.setCompassEnabled(true);

//aMap.getCameraPosition(); 方法可以获取地图的旋转角度

//管理缩放控件

settings.setZoomControlsEnabled(true);

//设置logo位置,左下,底部居中,右下(据我所知不能隐藏,知道的麻烦告我一声)

settings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_LEFT);

//设置显示地图的默认比例尺

settings.setScaleControlsEnabled(true);

//每像素代表几米

//float scale = aMap.getScalePerPixel();

aMap.setMyLocationEnabled(true);//显示定位层并且可以触发定位,默认是flase

}

//开始定位

location();

location()方法里面主要就是设置一下定位的参数:

//初始化定位

mLocationClient = new AMapLocationClient(getApplicationContext());

//设置定位回调监听

mLocationClient.setLocationListener(this);

//初始化定位参数

mLocationOption = new AMapLocationClientOption();

//设置定位模式为Hight_Accuracy高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式

mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);

//设置是否返回地址信息(默认返回地址信息)

mLocationOption.setNeedAddress(true);

//设置是否只定位一次,默认为false

mLocationOption.setOnceLocation(false);

//设置是否强制刷新WIFI,默认为强制刷新

mLocationOption.setWifiActiveScan(true);

//设置是否允许模拟位置,默认为false,不允许模拟位置

mLocationOption.setMockEnable(false);

//设置定位间隔,单位毫秒,默认为2000ms

mLocationOption.setInterval(2000);

//给定位客户端对象设置定位参数

mLocationClient.setLocationOption(mLocationOption);

//启动定位

mLocationClient.startLocation();

另外当前activity需要实现LocationSource与AMapLocationListener,并实现3个方法:

/** * 定位成功后回调函数 */

@Override

public void onLocationChanged(AMapLocation aMapLocation) {

if (aMapLocation != null) {

if (aMapLocation.getErrorCode() == 0) {

//可在其中解析amapLocation获取相应内容。

aMapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表

lat = aMapLocation.getLatitude();//获取纬度

lon = aMapLocation.getLongitude();//获取经度

aMapLocation.getAccuracy();//获取精度信息

aMapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。

aMapLocation.getCountry();//国家信息

aMapLocation.getProvince();//省信息

aMapLocation.getCity();//城市信息

aMapLocation.getDistrict();//城区信息

aMapLocation.getStreet();//街道信息

aMapLocation.getStreetNum();//街道门牌号信息

aMapLocation.getCityCode();//城市编码

aMapLocation.getAdCode();//地区编码

aMapLocation.getAoiName();//获取当前定位点的AOI信息

//获取定位时间

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Date date = new Date(aMapLocation.getTime());

df.format(date);

// 如果不设置标志位,此时再拖动地图时,它会不断将地图移动到当前的位置

if (isFirstLoc) {

//设置缩放级别(缩放级别为4-20级)

aMap.moveCamera(CameraUpdateFactory.zoomTo(zoomlevel));

//将地图移动到定位点

aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude())));

//点击定位按钮 能够将地图的中心移动到定位点

mListener.onLocationChanged(aMapLocation);

//获取定位信息

StringBuffer buffer = new StringBuffer();

buffer.append(aMapLocation.getCountry() + ""

+ aMapLocation.getProvince() + ""

+ aMapLocation.getCity() + ""

+ aMapLocation.getProvince() + ""

+ aMapLocation.getDistrict() + ""

+ aMapLocation.getStreet() + ""

+ aMapLocation.getStreetNum());

Toast.makeText(getApplicationContext(), buffer.toString(), Toast.LENGTH_LONG).show();

isFirstLoc = false;

}

}else {

//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。

Log.e("地图错误","定位失败, 错误码:" + aMapLocation.getErrorCode() + ", 错误信息:"

+ aMapLocation.getErrorInfo());

}

}

}

@Override

public void activate(OnLocationChangedListener onLocationChangedListener) {

mListener = onLocationChangedListener;

}

@Override

public void deactivate() {

mListener = null;

}

然后在activity的生命周期方法里添加地图相应的声明周期方法就行了:

@Override

protected void onDestroy() {

super.onDestroy();

//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理

mMapView.onDestroy();

mLocationClient.stopLocation();//停止定位

mLocationClient.onDestroy();//销毁定位客户端。

}

@Override

protected void onResume() {

super.onResume();

//在activity执行onResume时执行mMapView.onResume (),实现地图生命周期管理

mMapView.onResume();

}

@Override

protected void onPause() {

super.onPause();

//在activity执行onPause时执行mMapView.onPause (),实现地图生命周期管理

mMapView.onPause();

}

@Override

protected void onSaveInstanceState(Bundle outState) {

super.onSaveInstanceState(outState);

//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),实现地图生命周期管理

mMapView.onSaveInstanceState(outState);

}

如果想要自定义定位功能,只需要调用aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(纬度,经度),缩放级别))就可以了(这些在下面的源码里面写的很清楚)(注:缩放级别为4-20级)

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值