Android笔记
——高德地图
【若对该知识点有更多想了解的,欢迎私信博主~~】
高德地图:AMap
制作:
- 将jar包引入libs下,并加载(Add As Library)
- 在AndroidManifest.xml里添加权限
<!-- 用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 用于获取运营商信息,用于支持提供运营商信息相关的接口 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 用于访问网络,网络定位需要上网 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 用于读取手机当前的状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 用于写入缓存数据到扩展存储卡 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 用于申请调用A-GPS模块 -->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<!-- 用于申请获取蓝牙信息进行室内定位 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
- 生命周期及初始化地图
package com.example.sirl.practice;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
import com.amap.api.maps2d.AMap;
import com.amap.api.maps2d.CameraUpdateFactory;
import com.amap.api.maps2d.MapView;
import com.amap.api.maps2d.model.LatLng;
public class MainActivity extends AppCompatActivity {
MapView mapView;
AMap aMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//绑定控件
mapView=findViewById(R.id.map);
//在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
mapView.onCreate(savedInstanceState);
if (aMap==null){
//创建空地图地图为地图控件获取的地图(aMap一张空地图)
aMap=mapView.getMap();
//为地图添加初始点(默认北京)
LatLng latLng=new LatLng(30.484291,114.358571);
aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng,14));
}
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
mapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
mapView.onPause();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
mapView.onSaveInstanceState(outState);
}
}
绘制标记点:markerOptions
属性 | 说明 |
position | 在地图上标记位置的经纬度值 |
title | 点标记的标题 |
snippet | 点标记的内容 |
draggable | 点标记是否可拖拽 |
visible | 点标记是否可见 |
anchor | 点标记的锚点 |
alpha | 点的透明度 |
icon | 点图标 |
使用:
//新建标记点
MarkerOptions markerOptions=new MarkerOptions();
//为标记点添加属性
markerOptions.position(new LatLng(100,100));
//向地图中添加标记点
aMap.addMarker(markerOptions);
//清空点标记
aMap.clear();
高级方法:
- Marker 点击事件
//标记点单击事件
aMap.setOnMarkerClickListener(new AMap.OnMarkerClickListener() {
// 返回 true 则表示接口已响应事件,否则返回false
@Override
public boolean onMarkerClick(Marker marker) {
return false;
}
});
- Marker拖拽事件
//标记点拖拽事件
aMap.setOnMarkerDragListener(new AMap.OnMarkerDragListener() {
// 当marker开始被拖动时回调此方法, 这个marker的位置可以通过getPosition()方法返回。
// 这个位置可能与拖动的之前的marker位置不一样。
// marker 被拖动的marker对象。
@Override
public void onMarkerDragStart(Marker marker) {
}
// 在marker拖动完成后回调此方法, 这个marker的位置可以通过getPosition()方法返回。
// 这个位置可能与拖动的之前的marker位置不一样。
// marker 被拖动的marker对象。
@Override
public void onMarkerDrag(Marker marker) {
}
// 在marker拖动过程中回调此方法, 这个marker的位置可以通过getPosition()方法返回。
// 这个位置可能与拖动的之前的marker位置不一样。
// marker 被拖动的marker对象。
@Override
public void onMarkerDragEnd(Marker marker) {
}
});
两点测距:
float o=AMapUtils.calculateLineDistance(new LatLng(30.51619,114.318443),new LatLng(30.516215,114.318513));
地图画线:PolylienOptions
//制作坐标数组
List<LatLng> list1=new ArrayList<>();
list1.add(new LatLng(30.51619,114.318443));
list1.add(new LatLng(30.516215,114.318513));
//新建线段
PolylineOptions polylineOptions=new PolylineOptions();
//为线段添加属性
polylineOptions.addAll(list1);
//将线段添加到地图中
aMap.addPolyline(polylineOptions);
切换图层
//导航视图
aMap.setMapType(AMap.MAP_TYPE_NAVI);
//夜景地图
aMap.setMapType(AMap.MAP_TYPE_NIGHT);
//标准地图
aMap.setMapType(AMap.MAP_TYPE_NORMAL);
//卫星地图
aMap.setMapType(AMap.MAP_TYPE_SATELLITE);
//交通地图
aMap.setTrafficEnabled(true);
注:
- 参考高德官方指导完成SDK的引用。 https://lbs.amap.com/api/android-sdk/guide/create-project/android-studio-create-project
- 高德Android SDK下载地址: https://lbs.amap.com/api/android-sdk/download/
Amap3D及更高版本
使用
- 下载官方SDK,引入libs下,并加载(Add As Library)
- 在main文件夹下创建jniLibs文件夹,将配置文件添加到jniLibs中
- 在app的build.gradle中
android {
defaultConfig {
//添加ndk
ndk { //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so)
abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","arm64-v8a","x86_64"
}
}
//添加sourceSets
sourceSets {
main {
jniLibs.srcDirs = ['src/main/jniLibs']
}
}
}
- 在AndroidManifest.xml添加权限
- 在AndroidManifest.xml的application中添加key
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="defa40a1358288697aaf9b99a1fbbadf"/>//需要从高德地图官方获取key