分为地图,定位,搜索(我还没做导航功能)

建议采用gradle方式集成

添加依赖

在project/build.gradle文件下添加jcenter的仓库地址

allprojects {

repositories {

jcenter() // 或者 mavenCentral()

}

}

在app/build.gradle下添加依赖

android {

defaultConfig {

ndk {

//设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so)

abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64"

}

}

}

dependencies {

compile fileTree(dir: 'libs', include: ['*.jar'])

//3D地图so及jar

compile 'com.amap.api:3dmap:latest.integration'

//定位功能

compile 'com.amap.api:location:latest.integration'

//搜索功能

compile 'com.amap.api:search:latest.integration'

}

navi导航SDK 5.0.0以后版本包含了3D地图SDK,所以请不要同时引入 map3d 和 navi SDK。

添加权限

在AndroidManifest.xml文件下添加权限

添加高德key

同时创建debug和release的密钥文件,在app/build.gradle下做配置:

android {

signingConfigs {

release {

keyAlias 'xxxxxx'

keyPassword 'xxxxxx'

//..表示工程目录路径

storeFile file('../jks/map_release.jks')

storePassword 'xxxxxx'

}

debug {

keyAlias 'xxxxxx'

keyPassword 'xxxxxx'

storeFile file('../jks/map_debug.jks')

storePassword 'xxxxxx'

}

}

}

然后获取debug和release下的sha1值,在高德地图控制台创建key

然后在app/build.gradle下设置两种key,这里的key-value是一样的。因为高德控制台同一个应用下配置了debug和release的sha1值。

android {

buildTypes {

debug {

manifestPlacesholders = [

//左边的键MAP_API_KEY是自定义的名字,右边的key-value是你申请的key值

"MAP_API_KEY" : "key-value"

]

}

release{

manifestPlacesholders = [

//左边的键MAP_API_KEY要和debug下的保持一致,右边的key-value是你申请的key值

"MAP_API_KEY" : "key-value"

]

}

}

}

采用gradle方式集成,不需要在AndroidManifest.xml中添加key,添加定位服务

android:name="com.amap.api.v2.apikey"

//要和app/build.gradle文件中设置的保持一致

android:value="${MAP_API_KEY}"/>

使用地图

在布局中引入地图MapView

// R.layout.activity_your_activity

android:id="@+id/map"

android:layout_width="match_parent"

android:layout_height="match_parent"/>

管理地图的生命周期(非常重要),以Activity为例

public class YourActivity extends AppcompatActivity{

MapView mMapView = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_your_activity);

//获取地图控件引用

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

//在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图

mMapView.onCreate(savedInstanceState);

}

@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);

}

}

构造一个AMap对象

if(mAMap == null){

mAMap = mapView.getMap();

}

初始化地图的相关属性

相关类UiSettings(不做介绍,具体看官方文档),CameraUpdateFactory,CameraUpdate

对于CameraUpdateFactory,文档介绍

创建CameraUpdate 对象,用来改变地图状态。

调用 AMap.animateCamera(CameraUpdate) or AMap.moveCamera(CameraUpdate)。

地图中心点

//设置地图中心点

static CameraUpdate changeLatLng(LatLng latLng)

static CameraUpdate newLatLng(LatLng latLng)

地图缩放级别

static CameraUpdate zoomTo(float zoom);

地图中心点和缩放级别

//设置地图中心点以及缩放级别

static CameraUpdate newLatLngZoom(LatLng latLng, float zoom)

设置显示在规定屏幕范围内的地图经纬度范围

static CameraUpdate newLatLngBounds(LatLngBounds bounds, int padding)

创建LatLngBounds对象,LatLngBounds(LatLng southwest, LatLng northeast)

使用传入的西南角坐标和东北角坐标创建一个矩形区域。

添加marker

1.相关类

MarkerOptions

为marker设置属性

BitmapDescriptorFactory

生成BitmapDescriptor对象,设置给marker的icon.

BitmapDescriptor

给marker设置icon,MarkerOptions.icon(BitmapDescriptor)

2.相关API

第二个方法添加一组marker,地图会移动到该组marker所在区域的中心

//在地图上添一个图片标记(marker)对象。

Marker addMarker(MarkerOptions options)

//在地图上添一组图片标记(marker)对象,并设置是否改变地图状态以至于所有的marker对象都在当前地图可视区域范围内显示。

java.util.ArrayList addMarkers(java.util.ArrayList options, boolean moveToCenter)

3.如何使用:

//MarkerOptions的具体设置看官方文档

MarkerOptions markerOptions = new MarkerOptions();

//设置marker坐标

markerOptions.position(latLng);

//marker是否可拖拽

markerOptions.draggable(false);

//marker图标

markerOptions.icon(BitmapDescriptorFactory.fromBitmap(bitmap));

BitmapDescriptorFactory位于com.amap.api.maps.model包下,包含多个生成BitmapDescriptor的方法,如果一组marker的图标是一致的,建议先通过BitmapFactory生成一个bitmap,再通过BitmapDescriptorFactory.fromBitmap(bitmap)设置给marker.

如果一组marker数据量很大,不建议for循环遍历逐个添加.

MarkerOptions markerOptions = new MarkerOptions();

Bitmap bitmap = BitmapFactory.decodeResources(drawableResId);

List dataBeanList = new ArraryList<>();

int size = dataBeanList .size();

for(int x = 0;x< size; x++){

//设置marker坐标

markerOptions.position(latLng);

//marker是否可拖拽

markerOptions.draggable(false);

//marker图标

markerOptions.icon(BitmapDescriptorFactory.fromBitmap(bitmap));

//添加后返回该marker

Marker marker = mAMap.addMarker(markerOptions);

//为marker添加信息

marker.setObject(dataBeanList.get(x));

}

上面这种方式添加的marker数据量过大的话,marker会逐一显示在屏幕上,视觉效果不太好,建议采用下面的方法,通过addMarkers(List)一次性全部添加.

MarkerOptions markerOptions = new MarkerOptions();

//一组marker的图标一致的话,事先生成这个图标的bitmap实例对象

Bitmap bitmap = BitmapFactory.decodeResources(drawableResId);

List dataBeanList = new ArraryList<>();

ArrayList markerOptionList = new Arrary<>();

for(int x = 0;x< size; x++){

//设置marker坐标

markerOptions.position(latLng);

//marker是否可拖拽

markerOptions.draggable(false);

//marker图标

markerOptions.icon(BitmapDescriptorFactory.fromBitmap(bitmap));

markerOptionList.add(markerOptions);

}

// 添加后返回一组Marker

ArrayList markerList = mAMap.addMarkers(markerOptionList);

int index = 0;

for(Marker marker : markerList ){

//为marker设置信息

marker .setObject(dataBeanList.get(index++));

}

这种方法,可以使一组marker几乎同时出现,视觉效果更好.

4.marker的点击事件不再介绍.

5.更改已添加过的marker的属性

marker.setIcon()似乎无效果.待测

显示定位蓝点

未完待续

android 高德坐标对象,android: 高德地图相关推荐

  1. android 获取对话框对象,Android 基本Dialog和自定义Dialog

    Android 基本Dialog和自定义Dialog Dialog类是对话框的基类,但你应该避免直接实例化Dialog ,可以使用子类 1.AlertDialog 此对话框可以显示标题,最多三个按钮, ...

  2. android 序列化存储对象,android中对象序列化存储

    项目中要存储一些数据为了提高不必要的网络请求,提高效率,用到数据持久化的知识点,针对这个问题,解决办法其实有很多,以前在项目中是服务获取到webservice的xml,然后直接将xml保存在本地,之后 ...

  3. android sharedpreferences 存储对象,android中SharedPreferences实现存储用户名功能

    1. 简介 SharedPreferences是一种轻型的数据存储方式,通过key-value键值对的方式将数据存储在xml文件中,常用于存储简单的配置信息. 2. 使用方式 2.1 获取Shared ...

  4. android 百度坐标 gps,Android中gps定位不返回经纬度的解决方案

    定位,算是android应用中一个非常常见的功能了吧,并且大部分的应用里基本也都会用到地图,所以以前的做法基本都是直接接入了百度.高德这些第三方定位,也没遇到过什么问题. 然而,最近的工作基本上都是做 ...

  5. android requestparams传入对象,Android xutils3上传文件使用示例

    Android xutils3工具上传文件非常方便,只需要传入File文件数据或一些其它参数给RequestParams对象即可完成,现在我们来开始使用xutils工具上传文件吧! 步骤一:需要在项目 ...

  6. android 手动回收对象,Android Studio Studio回收列表中的JSON对象

    我想在recyclerview中显示一些JSON对象,并且希望它们在日期之后排序,我该如何实现?下面是下载从JSON URL的数据的方法:Android Studio Studio回收列表中的JSON ...

  7. android 获取drawable 对象,Android 实现将本地资源图片转换成Drawable的方法

    Android 实现将本地资源图片转换成Drawable的方法 发布时间:2020-11-06 16:37:09 来源:亿速云 阅读:255 作者:Leah 这篇文章将为大家详细讲解有关Android ...

  8. android 保存 parcelable对象,Android 使用序列化Serializable和Parcelable

    Android 序列化Serializable和Parcelable使用和区别 一:Serializable 1.什么是序列化 将一个类对象转换成可存储,可传输状态的过程. 2.什么是Serializ ...

  9. android传递socket对象,Android Socket通信详解

    一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时 ...

最新文章

  1. 不要再被 Python 洗脑了!!
  2. js改变img标签的src属性在IE下没反应的解决方法
  3. BeanUtils工具的使用
  4. iOS Charles 抓包
  5. OpenShift 4.10 不可变新特性 - 利用 MachineConfig 发现节点配置漂移
  6. 11计算机专业vb试题答案,西华师范大学计算机VB试题及答案11
  7. Java *1.11(人口估算)美国人口调查局基于以下假设进行人口估算:
  8. HTML+CSS综合实训(二) 仿制视频网
  9. css设overflow:hiden行内元素会发生偏移的现象
  10. shell编程100例(附PDF下载)
  11. 小白Bert系列-生成pb模型,tfserving加载,flask进行预测
  12. 英汉词典mysql_构建英汉词典数据库 java
  13. Java基础题10:(单选题)以下代码的输出结果是() public class Test { public static void main(String[] args) { Stri
  14. 微信小程序周报(第三期)
  15. 区块链开发公司 区块链何时能产生实际价值?
  16. 什么是Essay和Article?
  17. Python中的itchat模块使用大全
  18. 通过Chrome,在电脑上模拟安卓系统环境
  19. ARCGIS之征地坐标xls和报备坐标txt格式批量导出工具(定制开发版)
  20. 东华理工大学计算机通信网络试卷,东华理工大学计算网络与通信A1卷-参考答案...

热门文章

  1. Jetson Nano Nano 2G 官方镜像下载地址
  2. 华为苹果两家独霸中国高端手机市场,4000元以上份额合计近九成
  3. 武汉大学计算机专业网络安全,武汉大学网络空间安全考研科目有哪些?
  4. Getting Started with Boost
  5. Paper reading (八十四):Age- and Sex-Dependent Patterns of Gut Microbial Diversity in Human Adults
  6. 淘宝退货退款测试用例
  7. 基于易灵思开发板RiscV的调试流程
  8. 面试应该怎样应对!细节决定成败
  9. 工业控制系统安全评估流程威胁事件构建
  10. 猿创征文|unity中的MVC编程思想基础