AS导入地图记录
作者:互联网
1.申请接入流程
(参考https://blog.csdn.net/lc_miao/article/details/79710446?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control)
问题一:
开发未发布时会存在无debug.keystore问题
解决:https://blog.csdn.net/qq_33721320/article/details/88976863
2.在gradle里面添加依赖包和so库平台
有两种实现方法,一种是下载官方sdk手动添加,参考示例如下:
https://www.jianshu.com/p/f59231d5775f
一种是在gradle中通过代码实现,试了几次总是报错。
3.代码
MainActivity.java(最后获取定位信息的代码有误,还没有修正好,给注释掉了;现在不能准确定位,下一步继续修改,如果不行就先去掉定位功能加入搜索功能快速找到地块区域)aMap.setMapType(AMap.MAP_TYPE_SATELLITE);// 设置卫星地图模式 //默认为2d地图,写入此行代码显示卫星地图,后续可以添加按钮来实现地图切换功能。
public class MainActivity extends AppCompatActivity implements LocationSource, AMapLocationListener{
private MapView mMapView = null;
private AMap aMap; //AMap类是地图的控制器类,用来操作地图
private MyLocationStyle myLocationStyle; //地图定位样式
private AMapLocationClient mLocationClient;
private AMapLocationClientOption mLocationClientOption;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//设置对应的XML布局文件
mMapView = findViewById(R.id.map);//获取地图控件引用
//在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
mMapView.onCreate(savedInstanceState);//此方法必须重写
if (aMap == null){
aMap = mMapView.getMap(); //AMap aMap = mMapView.getMap();
aMap.setLocationSource((LocationSource) this);//设置定位监听,这里要实现LocationSource接口
}
aMap.setMapType(AMap.MAP_TYPE_SATELLITE);// 设置卫星地图模式,aMap是地图控制器对象。PS:后续可以在界面添加按钮来修改地图模式
myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类
//myLocationStyle.interval(2000);//设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
aMap.getUiSettings().setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示,非必需设置。PS:和上面的按钮显示与否同功能
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE) ;//连续定位、且将视角移动到地图中心点,地图依照设备方向旋转,定位点会跟随设备移动。(1秒1次定位)
/*定位蓝点提供8种定位模式
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW);//只定位一次。
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE) ;//定位一次,且将视角移动到地图中心点。
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW) ;//连续定位、且将视角移动到地图中心点,定位蓝点跟随设备移动。(1秒1次定位)
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE);//连续定位、且将视角移动到地图中心点,地图依照设备方向旋转,定位点会跟随设备移动。(1秒1次定位)
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)默认执行此种模式。
以下三种模式从5.1.0版本开始提供
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动。
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,并且蓝点会跟随设备移动。
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,地图依照设备方向旋转,并且蓝点会跟随设备移动。
*/
myLocationStyle.showMyLocation(true);//设置是否显示定位小蓝点,用于满足只想使用定位,不想使用定位小蓝点的场景,设置false以后图面上不再有定位蓝点的概念,但是会持续回调位置信息。
//myLocationStyle.myLocationIcon(BitmapDescriptor myLocationIcon);//设置定位蓝点的icon图标方法,需要用到BitmapDescriptor类对象作为参数。示例所用代码(BitmapDescriptorFactory.fromResource(R.mipmap.navi_map_gps_locked))
//myLocationStyle.strokeColor(int color);//设置定位蓝点精度圆圈的边框颜色的方法。
//myLocationStyle.radiusFillColor(int color);//设置定位蓝点精度圆圈的填充颜色的方法。
//myLocationStyle.anchor(float u, float v);//设置定位蓝点图标的锚点方法。
//MyLocationStyle strokeWidth(float width);//设置定位蓝点精度圈的边框宽度的方法。
aMap.setMyLocationEnabled(true);//设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
//配置定位参数,启动定位
mLocationClient = new AMapLocationClient(getApplicationContext());//设置定位回调监听,这里要实现AMapLocationListener接口,AMapLocationListener接口只有onLocationChanged方法可以实现,用于接收异步返回的定位结果,参数是AMapLocation类型。
mLocationClient.setLocationListener((AMapLocationListener) this);
mLocationClientOption = new AMapLocationClientOption();//初始化定位参数
mLocationClientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//设置定位模式为Hight_Accuracy高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
mLocationClientOption.setNeedAddress(true);//设置是否返回地址信息(默认返回地址信息)
mLocationClientOption.setOnceLocation(false);//设置是否只定位一次,默认为false
//mLocationClientOption.setWifiActiveScan(true);//设置是否强制刷新WIFI,默认为强制刷新
mLocationClientOption.setMockEnable(false);//设置是否允许模拟位置,默认为false,不允许模拟位置
//mLocationClientOption.setInterval(2000);//设置定位间隔,单位毫秒,默认为2000ms
mLocationClient.setLocationOption(mLocationClientOption);//给定位客户端对象设置定位参数
mLocationClient.startLocation();//启动定位
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
mMapView.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);
}
@Override
public void activate(OnLocationChangedListener onLocationChangedListener) {
//mListener = onLocationChangedListener;
}
@Override
public void deactivate() {
//mListener = null;
}
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
if (aMapLocation != null) {
if (aMapLocation.getErrorCode() == 0) {
//定位成功回调信息,设置相关消息
aMapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见官方定位类型表
aMapLocation.getLatitude();//获取纬度
aMapLocation.getLongitude();//获取经度
aMapLocation.getAccuracy();//获取精度信息
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(aMapLocation.getTime());
df.format(date);//定位时间
aMapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。
aMapLocation.getCountry();//国家信息
aMapLocation.getProvince();//省信息
aMapLocation.getCity();//城市信息
aMapLocation.getDistrict();//城区信息
aMapLocation.getStreet();//街道信息
aMapLocation.getStreetNum();//街道门牌号信息
aMapLocation.getCityCode();//城市编码
aMapLocation.getAdCode();//地区编码
/*/ 如果不设置标志位,此时再拖动地图时,它会不断将地图移动到当前的位置
if (isFirstLoc) {
//设置缩放级别
aMap.moveCamera(CameraUpdateFactory.zoomTo(17));
//将地图移动到定位点
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("AmapError", "location Error, ErrCode:"
+ aMapLocation.getErrorCode() + ", errInfo:"
+ aMapLocation.getErrorInfo());
//Toast.makeText(getApplicationContext(), "定位失败", Toast.LENGTH_LONG).show();
}
}
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.skypan.mapapplication">
<!--用于进行网络定位-->
<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>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MapApplication">
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="c39e810d933ed1117b8ffcddd1d02751"/>
<!--定位-->
<service android:name="com.amap.api.location.APSService"></service>
<activity android:name=".MainActivity"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
参考博客
1.https://blog.csdn.net/weixin_38596553/article/details/101451232
2.https://blog.csdn.net/lc_miao/article/details/79710446
3.https://blog.csdn.net/m0_38020167/article/details/99672359
4.官方教程:https://lbs.amap.com/api/android-location-sdk/guide/android-location/getlocation
4.线,面绘制
官方示例教程:https://lbs.amap.com/api/android-sdk/guide/draw-on-map/draw-polyline
标签:定位,记录,蓝点,地图,aMapLocation,导入,myLocationStyle,设置 来源: https://blog.csdn.net/qq_48832406/article/details/111466954