android 添加定位点,Android 高德基础地图定位、设置Marker、可视中心点实现步骤...
一、基础地图部分
1.获取APPKey
在高德地图注册开发者账号,然后创建应用,使用SHA1和PackageName得到Key
image.png
创建应用 输入你的应用名称 选择你的应用类型 点击确定
image.png
点击确定之后得到这么一个东西点击添加新key 输入完毕后再下方点击提交 获取SHA1值以及应用包名见下方
image.png
获取SHA1值方法:
首先使用cmd 打开dos窗口
image.png
输入cd .android 切换到 .android目录
image.png
使用keytool工具获取签名的SHA1值 输入命令:keytool -list -v -keystore debug.keystore 秘钥口令输入 android 或者直接回车
image.png
这里的指纹整数有MD5、SHA1、SHA256 这样就拿到了上面需要的SHA1值
image.png
获取应用包名:
打开你的gradle文件
image.png
这就是你的应用包名
image.png
提交之后得到的AppKey:
image.png
2.下载SDK
image.png
image.png
3.导入项目
把下载下来的压缩包解压,里面的jar包放到项目的libs目录下
image.png
然后Add As Library
image.png
集成高德地图需要用到.so文件 解压得到的.so文件 目录里面就是所需的.so文件
在main目录下创建jniLibs目录 注意是main目录 将解压得到的.so文件连带目录都copy到jniLibs目录下
image.png
4.配置清单文件
在AndroidManifest.xml里面添加你的AppKey
android:name="com.amap.api.v2.apikey"
android:value="99ac75ad4aa47d9b865cee7c3ef31a89"/>
在AndroidManifest.xml中添加用户权限
//地图包、搜索包需要的基础权限
//定位包、导航包需要的额外权限(注:基础权限也需要)
配置Service
5.布局文件:
在布局文件中添加地图控件
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="demo.gaode.com.gaodemapdemo.ShowMapActivity">
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent" />
6.正式开始写代码了
1.基础地图显示
效果图
image.png
初始化地图控件 管理地图控件生命周期
package demo.gaode.com.gaodemapblog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.amap.api.maps.MapView;
public class ShowMapActivity extends AppCompatActivity {
private MapView mapView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_map);
//初始化地图控件
mapView = (MapView) findViewById(R.id.map);
//必须要写
mapView.onCreate(savedInstanceState);
}
/**
* 方法必须重写
*/
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
/**
* 方法必须重写
*/
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
/**
* 方法必须重写
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
/**
* 方法必须重写
*/
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
}
2.定位功能实现
效果图以及Log
image.png
image.png
效果图和基础地图的效果图没什么区别,因为我既没有设置中心点也没有设置marker,但是我获取到了位置,那么定位完毕后添加一个中心点,一个marker就可以完成基础地图+定位+marker的效果了
先把定位的所有代码贴出来
package demo.gaode.com.gaodemapblog;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.maps.AMap;
import com.amap.api.maps.MapView;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ShowMapActivity extends Activity {
private MapView mapView;
private AMap aMap;
//声明AMapLocationClient类对象
public AMapLocationClient mLocationClient = null;
//声明定位回调监听器
public AMapLocationListener mLocationListener = new AMapLocationListener() {
@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();//地区编码
amapLocation.getAoiName();//获取当前定位点的AOI信息
lat = amapLocation.getLatitude();
lon = amapLocation.getLongitude();
Log.v("pcw","lat : "+lat+" lon : "+lon);
} else {
//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
Log.e("AmapError", "location Error, ErrCode:"
+ amapLocation.getErrorCode() + ", errInfo:"
+ amapLocation.getErrorInfo());
}
}
}
};
//声明mLocationOption对象
public AMapLocationClientOption mLocationOption = null;
private double lat;
private double lon;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_map);
mapView = (MapView) findViewById(R.id.map);
mapView.onCreate(savedInstanceState);//必须要写
//初始化定位
mLocationClient = new AMapLocationClient(getApplicationContext());
//设置定位回调监听
mLocationClient.setLocationListener(mLocationListener);
init();
}
/**
* * 初始化AMap对象
*/
private void init() {
if (aMap == null) {
aMap = mapView.getMap();
}
setUpMap();
}
private void setUpMap() {
//初始化定位参数
mLocationOption = new AMapLocationClientOption();
//设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//设置是否返回地址信息(默认返回地址信息)
mLocationOption.setNeedAddress(true);
//设置是否只定位一次,默认为false
mLocationOption.setOnceLocation(false);
//设置是否强制刷新WIFI,默认为强制刷新
mLocationOption.setWifiActiveScan(true);
//设置是否允许模拟位置,默认为false,不允许模拟位置
mLocationOption.setMockEnable(false);
//设置定位间隔,单位毫秒,默认为2000ms
mLocationOption.setInterval(2000);
//给定位客户端对象设置定位参数
mLocationClient.setLocationOption(mLocationOption);
//启动定位
mLocationClient.startLocation();
}
/**
* 方法必须重写
*/
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
/**
* 方法必须重写
*/
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onStop() {
super.onStop();
mLocationClient.stopLocation();//停止定位
}
/**
* 方法必须重写
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
/**
* 方法必须重写
*/
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
mLocationClient.onDestroy();//销毁定位客户端。
}
}
这里面有一个地方千万要记住,一定要在AndroidManifest.xml中注册广播 否则定位会失败
下面来讲讲这段代码里面几个组成:
初始化定位
//初始化定位
mLocationClient = new AMapLocationClient(getApplicationContext());
//设置定位回调监听
mLocationClient.setLocationListener(mLocationListener);
初始化AMap对象
/**
* * 初始化AMap对象
*/
private void init() {
if (aMap == null) {
aMap = mapView.getMap();
}
setUpMap();
}
配置定位参数并开始定位
/**
* 配置定位参数
*/
private void setUpMap() {
//初始化定位参数
mLocationOption = new AMapLocationClientOption();
//设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//设置是否返回地址信息(默认返回地址信息)
mLocationOption.setNeedAddress(true);
//设置是否只定位一次,默认为false
mLocationOption.setOnceLocation(false);
//设置是否强制刷新WIFI,默认为强制刷新
mLocationOption.setWifiActiveScan(true);
//设置是否允许模拟位置,默认为false,不允许模拟位置
mLocationOption.setMockEnable(false);
//设置定位间隔,单位毫秒,默认为2000ms
mLocationOption.setInterval(2000);
//给定位客户端对象设置定位参数
mLocationClient.setLocationOption(mLocationOption);
//启动定位
mLocationClient.startLocation();
}
在onStop里面停止定位
@Override
protected void onStop() {
super.onStop();
mLocationClient.stopLocation();//停止定位
}
在onDestory方法里面销毁定位
/**
* 方法必须重写
*/
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
mLocationClient.onDestroy();//销毁定位客户端。
}
设置定位监听,在监听中可以获取定位的一系列数据
/**
* 声明定位回调监听器
*/
public AMapLocationListener mLocationListener = new AMapLocationListener() {
@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();//地区编码
amapLocation.getAoiName();//获取当前定位点的AOI信息
lat = amapLocation.getLatitude();
lon = amapLocation.getLongitude();
Log.v("pcw","lat : "+lat+" lon : "+lon);
} else {
//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
Log.e("AmapError", "location Error, ErrCode:"
+ amapLocation.getErrorCode() + ", errInfo:"
+ amapLocation.getErrorInfo());
}
}
}
};
3.设置中心点以及marker
效果图
image.png
有了效果图 那么我把基础地图+定位+marker的代码贴出来
package demo.gaode.com.gaodemapblog;
import android.app.Activity;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.maps.AMap;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.MapView;
import com.amap.api.maps.model.BitmapDescriptor;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.MarkerOptions;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ShowMapActivity extends Activity {
private MapView mapView;
private AMap aMap;
//声明AMapLocationClient类对象
public AMapLocationClient mLocationClient = null;
/**
* 声明定位回调监听器
*/
public AMapLocationListener mLocationListener = new AMapLocationListener() {
@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();//地区编码
amapLocation.getAoiName();//获取当前定位点的AOI信息
lat = amapLocation.getLatitude();
lon = amapLocation.getLongitude();
Log.v("pcw", "lat : " + lat + " lon : " + lon);
Log.v("pcw", "Country : " + amapLocation.getCountry() + " province : " + amapLocation.getProvince() + " City : " + amapLocation.getCity() + " District : " + amapLocation.getDistrict());
// 设置当前地图显示为当前位置
aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lon), 19));
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(new LatLng(lat, lon));
markerOptions.title("当前位置");
markerOptions.visible(true);
BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.location_marker));
markerOptions.icon(bitmapDescriptor);
aMap.addMarker(markerOptions);
} else {
//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
Log.e("AmapError", "location Error, ErrCode:"
+ amapLocation.getErrorCode() + ", errInfo:"
+ amapLocation.getErrorInfo());
}
}
}
};
//声明mLocationOption对象
public AMapLocationClientOption mLocationOption = null;
private double lat;
private double lon;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_map);
mapView = (MapView) findViewById(R.id.map);
mapView.onCreate(savedInstanceState);//必须要写
//初始化定位
mLocationClient = new AMapLocationClient(getApplicationContext());
//设置定位回调监听
mLocationClient.setLocationListener(mLocationListener);
init();
}
/**
* * 初始化AMap对象
*/
private void init() {
if (aMap == null) {
aMap = mapView.getMap();
}
setUpMap();
}
/**
* 配置定位参数
*/
private void setUpMap() {
//初始化定位参数
mLocationOption = new AMapLocationClientOption();
//设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//设置是否返回地址信息(默认返回地址信息)
mLocationOption.setNeedAddress(true);
//设置是否只定位一次,默认为false
mLocationOption.setOnceLocation(false);
//设置是否强制刷新WIFI,默认为强制刷新
mLocationOption.setWifiActiveScan(true);
//设置是否允许模拟位置,默认为false,不允许模拟位置
mLocationOption.setMockEnable(false);
//设置定位间隔,单位毫秒,默认为2000ms
mLocationOption.setInterval(2000);
//给定位客户端对象设置定位参数
mLocationClient.setLocationOption(mLocationOption);
//启动定位
mLocationClient.startLocation();
}
/**
* 方法必须重写
*/
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
/**
* 方法必须重写
*/
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onStop() {
super.onStop();
mLocationClient.stopLocation();//停止定位
}
/**
* 方法必须重写
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
/**
* 方法必须重写
*/
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
mLocationClient.onDestroy();//销毁定位客户端。
}
}
代码实际上没什么难度,也不多,下面我把设置marker的代码贴出来
// 设置当前地图显示为当前位置
aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lon), 19));
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(new LatLng(lat, lon));
markerOptions.title("当前位置");
markerOptions.visible(true);
BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.location_marker));
markerOptions.icon(bitmapDescriptor);
aMap.addMarker(markerOptions);
好了,到这里 基础地图+定位+marker就做出来了
android 添加定位点,Android 高德基础地图定位、设置Marker、可视中心点实现步骤...相关推荐
- 手把手教你实现百度基础地图+定位功能+设置中心点+添加Marker
配置环境 1.获取AppKey 1.创建应用地址:http://lbsyun.baidu.com/apiconsole/key 2.创建应用: 3.获取SHA1值,首先cmd打开dos窗口 4.cd ...
- web使用高德完成地图定位_如何在您的Web设计服务中定位-以及何时应该使用
web使用高德完成地图定位 To niche or not to niche? 要利基还是不利基? Let me get straight to it and say that you don't h ...
- 高德地图sdk设置marker并且将设置为地图中心
高德地图sdk设置marker并且将设置为地图中心,直接在官方demo里改,授权key需要改为自己的. <!doctype html> <html> <head>& ...
- Android添加item动画,RecyclerView基础篇-Item添加动画
Android_Banner.jpg 简介 本节中我们介绍下给RecyclerView中的Item添加动画. 添加的动画,分为,在打开列表时有Item的展示动画,当滑动的时候没有动画 和打开列表滑动时 ...
- android 添加splash,$Android启动界面(Splash)的两种实现方法
(一)用2个Activity实现 用Handler对象的postDelayed方法来实现延迟跳转的目的. 补充:Handler的常用方法: // 立即执行Runnable对象 public final ...
- xpwifi热点设置android,教你在XP电脑中开启设置WiFi热点使用的步骤
对于系统中网络的连接问题是最重要的,那在处理不同的错误的情况中,对于无线网络的设置也就是我们说的WiFi的使用也是会遇到问题的,那在操作的时候对于电脑中是怎么实现设置WiFi热点的的,对于这个问题今天 ...
- Android真机测试使用百度地图定位到非洲附近的的问题
我用的是自个8.0的手机,我碰到的是动态权限问题,AndroidManifest里面权限都加了,输出日志得到的经纬度如 下代码 //经纬度对象5/11 LatLng ll = new LatLng(b ...
- Android 使用 Retrofit 保存 高德 静态地图API 获取的地图图片
1.导入包 api 'com.squareup.retrofit2:retrofit:2.3.0' // 必要retrofit依赖 api 'com.squareup.retrofit2:adapte ...
- android添加imageview,android – 以编程方式将ImageView添加到Layout
我想创建从屏幕上方向下的图像. 到今天为止我有这个: ImageView mario = (ImageView) findViewById(R.id.mario); TranslateAnimatio ...
最新文章
- 美国星巴克肯德基明年将支持Apple Pay
- 安卓开发 底部导航图标切换时动画效果_安卓10系统终于来了,流畅度堪比苹果?...
- 字符设备驱动程序之poll机制
- Github使用初体验2018.08.07
- Python 学习第十六天 html 前端内容总结
- 实战例子_Pytorch官方力荐新书《Pytorch深度学习实战指南》pdf及代码分享
- C# ADO.NET
- 分布式事务一致性方案
- Django之forms组件使用
- 三星s9 android p内测,三星国行Galaxy S9/S9+用户安卓9.0内测:更新One UI
- 人事考勤系统服务器端,考勤管理,考勤管理系统,人事考勤管理系统,考勤系统 - 新开普(NewCapec)...
- python读取grd数据_python批处理系列代码-GRD转TIF
- 【Pygame实战】第三版本最终确认——《愤怒的小鸟梦幻爆破》上线回归,爆赞~
- 中国剩余定理(孙子定理)
- 函数逼近和曲线拟合、插值
- 模块*.ocx已加载,但对DllRegisterServer的调用失败,错误代码0x8002801c问题解决
- 为VMware vSphere创建Ubuntu 16.04 Terraform模板
- 技术时代的人心识别:从可能向现实的跨越丨上海交通大学教授博士生导师李侠...
- 几种软件开发方法对比
- Python与企业微信-2