最进简单研究了一下关于高德地图的使用,,简单实现了定位搜素,以及驾车的路径规划,一下将介绍我的实现过程:
先展示一下实现的简单效果:
首先需要进行配置,配置详情如下:
1、打开高德开放平台
2、创建应用
3、添加新key:dd9dde5da25a5811031cb1beb5a******
sha1值获取:找到系统默认的debug.keystore(C:\Users\Administrator\.android\debug.keystore)
在cmd窗口或android studio 中的Terminal中执行命令:keytool -v -list -keystore keystore地址
4、添加jar和so库(不要添加v4包)
so库添加方式:
第一种:使用默认配置,不需要修改build.gradle。在 main 目录下创建文件夹 jniLibs (如果有就不需要创建了),将下载文件的 armeabi 文件夹复制到这个目录下,如果已经有这个目录,将下载的 so 库复制到这个目录即可。
第二种:使用自定义配置,将下载文件的 armeabi 文件夹复制到 libs 目录,如果有这个目录,请将下载的 so 库复制到这个目录,然后打开build.gradle,找到 sourceSets 标签:
sourceSets{
main{
jniLibs.srcDirs = ['libs']
}
}
5、配置
1、配置AndroidManifest.xml
1、声明Service组件
<service android:name="com.amap.api.location.APSService"></service>
2、声明权限
<!--用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!--用于获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!--用于访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<!--用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!--用于写入缓存数据到扩展存储卡-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!--用于申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
<!--用于申请获取蓝牙信息进行室内定位-->
<uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>
3、设置高德Key
<meta-data android:name="com.amap.api.v2.apikey" android:value="key">//开发者申请的key
</meta-data>
下面实现定位和蓝点显示:
1、声明成员变量
//声明AMapLocationClient类对象
public AMapLocationClient mLocationClient = null;
2、初始化定位
//初始化定位
mLocationClient = new AMapLocationClient(getApplicationContext());
3、设置定位回调监听
mLocationClient.setLocationListener(new AMapLocationListener(){
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
//获取定位结果
}
});
4、定位结果处理
if (aMapLocation != null) {
if (aMapLocation.getErrorCode() == 0) {
//可在其中解析amapLocation获取相应内容。
int locationType = aMapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表
double latitude = aMapLocation.getLatitude();//获取纬度
double longitude = aMapLocation.getLongitude();//获取经度
float accuracy = aMapLocation.getAccuracy();//获取精度信息
String address = 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信息
aMapLocation.getBuildingId();//获取当前室内定位的建筑物Id
aMapLocation.getFloor();//获取当前室内定位的楼层
//获取定位时间
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(aMapLocation.getTime());
df.format(date);
Log.e("TAG", "纬度:" + latitude + " 经度:" + longitude + " 地址:" + address);
} else {
//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
Log.e("AmapError", "location Error, ErrCode:"
+ aMapLocation.getErrorCode() + ", errInfo:"
+ aMapLocation.getErrorInfo());
}
}
7、地图
1、在xml中声明MapView控件
2、在activity中初始化MapView
3、在声明周期中调用MapView的声明周期:onCreate\onResume\onPause\onDestroy\onSaveInstanceState
8、蓝点
1、创建MyLocationStyle对象: style = new MyLocationStyle();
2、设置定位间隔时间:style.interval(2000);
3、设置圆形区域:
1、圆形区域填充色:style.radiusFillColor(Color.rgb(0, 255, 255));
2、圆形区域(以定位位置为圆心,定位半径的圆形区域)的边框颜色:style.strokeColor(Color.rgb(0, 100, 255));
3、圆形区域(以定位位置为圆心,定位半径的圆形区域)