Android笔记

——高德地图
若对该知识点有更多想了解的,欢迎私信博主~~

高德地图:AMap
制作:
  1. 将jar包引入libs下,并加载(Add As Library)
  2. 在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" />
  1. 生命周期及初始化地图
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();
高级方法:
  1. Marker 点击事件
//标记点单击事件
aMap.setOnMarkerClickListener(new AMap.OnMarkerClickListener() {
    // 返回 true 则表示接口已响应事件,否则返回false 
    @Override
     public boolean onMarkerClick(Marker marker) {
          return false;
     }
});
  1. 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);
注:
  1. 参考高德官方指导完成SDK的引用。 https://lbs.amap.com/api/android-sdk/guide/create-project/android-studio-create-project
  2. 高德Android SDK下载地址: https://lbs.amap.com/api/android-sdk/download/
Amap3D及更高版本
使用
  1. 下载官方SDK,引入libs下,并加载(Add As Library)
  2. 在main文件夹下创建jniLibs文件夹,将配置文件添加到jniLibs中
  3. 在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']
        }
    }
}
  1. 在AndroidManifest.xml添加权限
  2. 在AndroidManifest.xml的application中添加key
<meta-data
 	android:name="com.amap.api.v2.apikey"
    android:value="defa40a1358288697aaf9b99a1fbbadf"/>//需要从高德地图官方获取key