android 怎么在android 高德地图开发显示定位点

Android项目源码高德地图全功能演示demo
今天是&&日&&&&&&星期二
您还没有登录,&&&&
当前位置:
Android项目源码高德地图全功能演示demo
更新时间:日
浏览次数:4964 次
下载次数:626 次
一个高德地图的demo,演示了基本地图的使用、supportmapfragment创建地图、camera功能、events功能、layers图层功能、热力图功能、地图POI点击功能、地图截屏功能、openg接口功能、polylines功能、polygons功能、arc功能、groundoverlay功能、navigatearrow功能、地理编码功能、lacation小蓝点功能、lacation三种模式、gps追踪功能、gps定位功能、网络定位功能、poi关键字搜索、POI周边搜索、busline公交查询、route路径规划、离线地图功能、行政区划查询功能等。之前也介绍过其他类型的安卓地图项目源码,感兴趣的可以在搜索“地图”就可以找到。
您必须才能评论.
请问这是新版的还是旧版的
谢谢,好好学习一下。
&&常见问题
&&充值交易
&&快捷通道
&&用户中心
· 鲁ICP备号-1· Powered by · Theme by JavaApkTM
· .14 queries in 0.725 seconds5847人阅读
Android开发(2)
一、基础地图部分
1.获取APPKey
在高德地图注册开发者账号,然后创建应用,使用SHA1和PackageName得到Key
创建应用的链接:/
创建应用 &输入你的应用名称 选择你的应用类型 点击确定
点击确定之后得到这么一个东西点击添加新key &输入完毕后再下方点击提交 & 获取SHA1值以及应用包名见下方
获取SHA1值方法:
首先使用cmd 打开dos窗口
输入cd .android 切换到 .android目录
使用keytool工具获取签名的SHA1值 输入命令:keytool -list -v -keystore debug.keystore 秘钥口令输入 android 或者直接回车
这里的指纹整数有MD5、SHA1、SHA256 这样就拿到了上面需要的SHA1值
获取应用包名:
打开你的gradle文件
这就是你的应用包名
提交之后得到的AppKey:
下载地址:/api/android-sdk/down/
定位SDK下载地址:/api/android-location-sdk/download/
3.导入项目
把下载下来的压缩包解压,里面的jar包放到项目的libs目录下
然后Add As Library
集成高德地图需要用到.so文件 & &解压得到的.so文件 目录里面就是所需的.so文件
在main目录下创建jniLibs目录 注意是main目录 & &将解压得到的.so文件连带目录都copy到jniLibs目录下
4.配置清单文件
在AndroidManifest.xml里面添加你的AppKey
&meta-data
android:name=&com.amap.api.v2.apikey&
android:value=&99ac75ad4aa47d9b865cee7c3ef31a89&/&
在AndroidManifest.xml中添加用户权限
//地图包、搜索包需要的基础权限
&uses-permission android:name=&android.permission.INTERNET& /&
&uses-permission android:name=&android.permission.WRITE_EXTERNAL_STORAGE& /&
&uses-permission android:name=&android.permission.ACCESS_NETWORK_STATE& /&
&uses-permission android:name=&android.permission.ACCESS_WIFI_STATE& /&
&uses-permission android:name=&android.permission.READ_PHONE_STATE& /&
&uses-permission android:name=&android.permission.ACCESS_COARSE_LOCATION& /&
//定位包、导航包需要的额外权限(注:基础权限也需要)
&uses-permission android:name=&android.permission.ACCESS_FINE_LOCATION& /&
&uses-permission android:name=&android.permission.ACCESS_LOCATION_EXTRA_COMMANDS& /&
&uses-permission android:name=&android.permission.CHANGE_WIFI_STATE& /&
&uses-permission android:name=&android.permission.CHANGE_CONFIGURATION&/&
&uses-permission android:name=&android.permission.WRITE_SETTINGS&/&
配置Service
&service android:name=&com.amap.api.location.APSService&/&
5.布局文件:
在布局文件中添加地图控件
&?xml version=&1.0& encoding=&utf-8&?&
&RelativeLayout xmlns:android=&/apk/res/android&
xmlns:tools=&/tools&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
tools:context=&.gaodemapdemo.ShowMapActivity&&
&!-- 引入布局文件 --&
&com.amap.api.maps.MapView
xmlns:android=&/apk/res/android&
android:id=&@+id/map&
android:layout_width=&match_parent&
android:layout_height=&match_parent& /&
&/RelativeLayout&
6.正式开始写代码了
1.基础地图显示
初始化地图控件 管理地图控件生命周期
import android.support.v7.app.AppCompatA
import android.os.B
import com.amap.api.maps.MapV
public class ShowMapActivity extends AppCompatActivity {
private MapView mapV
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_map);
//初始化地图控件
mapView = (MapView) findViewById(R.id.map);
//必须要写
mapView.onCreate(savedInstanceState);
* 方法必须重写
protected void onResume() {
super.onResume();
mapView.onResume();
* 方法必须重写
protected void onPause() {
super.onPause();
mapView.onPause();
* 方法必须重写
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
* 方法必须重写
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
2.定位功能实现
效果图以及Log
效果图和基础地图的效果图没什么区别,因为我既没有设置中心点也没有设置marker,但是我获取到了位置,那么定位完毕后添加一个中心点,一个marker就可以完成基础地图+定位+marker的效果了
先把定位的所有代码贴出来
import android.app.A
import android.os.B
import android.util.L
import com.amap.api.location.AMapL
import com.amap.api.location.AMapLocationC
import com.amap.api.location.AMapLocationClientO
import com.amap.api.location.AMapLocationL
import com.amap.api.maps.AM
import com.amap.api.maps.MapV
import java.text.SimpleDateF
import java.util.D
public class ShowMapActivity extends Activity {
private MapView mapV
private AMap aM
//声明AMapLocationClient类对象
public AMapLocationClient mLocationClient =
//声明定位回调监听器
public AMapLocationListener mLocationListener = new AMapLocationListener() {
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);
//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
Log.e(&AmapError&, &location Error, ErrCode:&
+ amapLocation.getErrorCode() + &, errInfo:&
+ amapLocation.getErrorInfo());
//声明mLocationOption对象
public AMapLocationClientOption mLocationOption =
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);
* * 初始化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();
* 方法必须重写
protected void onResume() {
super.onResume();
mapView.onResume();
* 方法必须重写
protected void onPause() {
super.onPause();
mapView.onPause();
protected void onStop() {
super.onStop();
mLocationClient.stopLocation();//停止定位
* 方法必须重写
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
* 方法必须重写
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
mLocationClient.onDestroy();//销毁定位客户端。
这里面有一个地方千万要记住,一定要在AndroidManifest.xml中注册广播 &否则定位会失败
&service android:name=&com.amap.api.location.APSService&/&
下面来讲讲这段代码里面几个组成:
初始化定位
//初始化定位
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里面停止定位
protected void onStop() {
super.onStop();
mLocationClient.stopLocation();//停止定位
在onDestory方法里面销毁定位
* 方法必须重写
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
mLocationClient.onDestroy();//销毁定位客户端。
设置定位监听,在监听中可以获取定位的一系列数据
* 声明定位回调监听器
public AMapLocationListener mLocationListener = new AMapLocationListener() {
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);
//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
Log.e(&AmapError&, &location Error, ErrCode:&
+ amapLocation.getErrorCode() + &, errInfo:&
+ amapLocation.getErrorInfo());
3.设置中心点以及marker
有了效果图 &那么我把基础地图+定位+marker的代码贴出来
import android.app.A
import android.graphics.BitmapF
import android.os.B
import android.util.L
import com.amap.api.location.AMapL
import com.amap.api.location.AMapLocationC
import com.amap.api.location.AMapLocationClientO
import com.amap.api.location.AMapLocationL
import com.amap.api.maps.AM
import com.amap.api.maps.CameraUpdateF
import com.amap.api.maps.MapV
import com.amap.api.maps.model.BitmapD
import com.amap.api.maps.model.BitmapDescriptorF
import com.amap.api.maps.model.LatL
import com.amap.api.maps.model.MarkerO
import java.text.SimpleDateF
import java.util.D
public class ShowMapActivity extends Activity {
private MapView mapV
private AMap aM
//声明AMapLocationClient类对象
public AMapLocationClient mLocationClient =
* 声明定位回调监听器
public AMapLocationListener mLocationListener = new AMapLocationListener() {
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);
//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
Log.e(&AmapError&, &location Error, ErrCode:&
+ amapLocation.getErrorCode() + &, errInfo:&
+ amapLocation.getErrorInfo());
//声明mLocationOption对象
public AMapLocationClientOption mLocationOption =
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);
* * 初始化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();
* 方法必须重写
protected void onResume() {
super.onResume();
mapView.onResume();
* 方法必须重写
protected void onPause() {
super.onPause();
mapView.onPause();
protected void onStop() {
super.onStop();
mLocationClient.stopLocation();//停止定位
* 方法必须重写
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
* 方法必须重写
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就做出来了
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:9484次
排名:千里之外&&&&Android加载高德地图 获取当前位置及各点位置
Android加载高德地图 获取当前位置及各点位置
android加载高德地图,定位当前位置,根据点击不同点获取不同地理位置名称
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
移动开发下载排行下次自动登录
现在的位置:
& 综合 & 正文
高德地图api之location定位服务
除了basic map外,高德地图api还提供了定位服务,兴趣点搜索服务,路线查找服务,离线地图服务。
现在我们看一下api中如何使用AMaplocation定位服务:
其实在android api中已经提供了android.location package,但是AMap的api提供了一个MapLocationApi.jar包,其中的定位服务基本一样,其中有几个重要的类:AMapLocation,AMapLocationListener,LocationManagerProxy,LocationProviderProxy
与 android自带的Location服务一样,AMapLocationManagerProxy类是Location服务的关键类,其意思就是Location服务的管理,而LocationProviderProxy类就是Location服务的提供者,而AMapLocation就是Location服务的实现形式,AMapLocationListener就是Location的监听器。
》Fisrtly,我们来看怎样实现GPS定位:
第一步:定义一个LocationManagerProxy类的对象,由LocationProviderPRoxy不断请求获得AMapLocation
locationManager = LocationManagerProxy.getInstance(this);
// Location API定位采用GPS定位方式,时间最短是5000毫秒
locationManager.requestLocationUpdates(
LocationManagerProxy.GPS_PROVIDER, 5000, 10,
AMapLocationListener);
对获得AMapLocation进行事件处理,重写AMapLocationListener的四个方法:
void onLocationChanged(Location location) {
void onProviderDisabled(String provider) {
void onProviderEnabled(String provider) {
void onStatusChanged(String provider, int status, Bundle extras) {
* 过滤gps定位返回的数据
void onLocationChanged(AMapLocation location) {
if (location !=null) {
Double geoLat = location.getLatitude();
Double geoLng = location.getLongitude();
String str = ("定位成功:(" + geoLng +"," + geoLat +
:" + location.getAccuracy() +"米"
+ "\n定位方式:" + location.getProvider() +"\n定位时间:" + AMapUtil
.convertToTime(location.getTime()));
Message msg = new Message();
if (handler !=null) {
handler.sendMessage(msg);
ps:在重写的方法中我们定义了获得Location之后要做的事,这里就是在一个TextView中显示出来。
在Activity的onPause()和onDestroy()中注销掉LocationManagerProxy和它的请求。
locationManager.removeUpdates(this);
locationManager.destory();
使用过andorid自带的Location服务就知道Location服务的提供者Provider有好几个值,除了GPS定位之外还有wifi定位,由于AMap中GPS默认是开启的,所以我们使用AMapLocationProxy.AMapNetwork这个Provier是就可以实现混合定位,这样就可以全面获得定位服务,获得了定位Location之后,当然要将其显示在AMap上。
》如何将定位信息显示在AMap上:
将定位服务和AMap服务集成在一起,就可以在地图上显示自己的定位:
第一步:定义AMapLocationProxy类通过AMapLocationProviderProxy获得Location服务,重写AMapLocationListener的五个方法;
第二步:设置地图上的LocationButton能响应点击事件,对点击事件设置定位地点LocationSource,
LocationSouce是com.amp.api.maps中的一个接口类,其中有一个监听器OnLocationChangeListener。
aMap.setLocationSource(LocationSource);
aMap.setMyLocationEnabled(true);
第三步:重写LocationSource的两个方法,目的是是让地图显示定位地点。
void activate(OnLocationChangedListener listener) {
mListener =
if (mAMapLocationManager ==null)
mAMapLocationManager = LocationManagerProxy.getInstance(this);
* mAMapLocManager.setGpsEnable(false);//
* 1.0.2版本新增方法,设置true表示混合定位中包含gps定位,false表示纯网络定位,默认是true
// Location API定位采用GPS和网络混合定位方式,时间最短是5000毫秒
mAMapLocationManager.requestLocationUpdates(
LocationProviderProxy.AMapNetwork, 5000, 10,this);
void deactivate() {
mListener =null;
if (mAMapLocationManager !=null)
mAMapLocationManager.removeUpdates(this);
mAMapLocationManager.destory();
mAMapLocationManager =null;
第四步:注销掉获得的AMapLocationMangerProxy及其获得的服务。
&&&&推荐文章:
【上篇】【下篇】

我要回帖

更多关于 高德地图sdk android 的文章

 

随机推荐