在应用开发中,地图开发是经常需要使用的“组件”,国内比较出名的是就是百度地图和高德地图。
此博客讲的是高德地图实现定位和3D地图显示,并标注相应位置,话不多说,先看看效果,在上代码。
效果如图:
首先注册高德成为开发者(打开高德地图,点击底部的开发者平台),创建应用,按照要求填写相应信息,如下图:
途中包含了发布版的SHA1安全码和测试版SHA1安全码,两者的值可以看 博客 : Android Studio apk打包,keystore.jks文件生成,根据keystore密钥获取SHA1安全码
讲的很详细,照做就一定会成功获取的。
首先导入高德的jar包
选中jar包右键点击 Add As Library, 在build.fradle中看到如下代码 表示导包成功
compile files('libs/AMap_Location_V3.0.0_20160922.jar')
compile files('libs/AMap_Search_V3.5.0_20160927.jar')
compile files('libs/AMap_3DMap_V4.1.1_20161019.jar')
代码:(注:项目代码目录中要添加一个接口文件 JniLibs 的os文件 才能绘制地图,具体下载源码查看,就不详细描述了)
/****
* 讲诉了高德地图定位和3D地图显示
*
* 打包和未打包的情况是不一样的,高德配置是可以配置调试版和发布版
*
*/
public class MainActivity extends AppCompatActivity implements AMapLocationListener,GeocodeSearch.OnGeocodeSearchListener {
private AMapLocationClient locationClient = null;
private AMapLocationClientOption locationOption = null;
private TextView textView;
private String[] strMsg;
private com.amap.api.maps.AMap aMap;
private MapView mapView;
private GeocodeSearch geocoderSearch;
private Marker geoMarker;
private static LatLonPoint latLonPoint;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.text_map);
mapView = (MapView) findViewById(R.id.map);
mapView.onCreate(savedInstanceState);// 此方法必须重写
Location();
}
private void initMap(){
if (aMap == null) {
aMap = mapView.getMap();
//用高德默认图标
//geoMarker= aMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
//自定义图标
geoMarker = aMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f)
.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.mipmap.punch_dw))));
}
geocoderSearch = new GeocodeSearch(this);
geocoderSearch.setOnGeocodeSearchListener(this);
getAddress(latLonPoint);
}
@Override
public void onLocationChanged(AMapLocation loc) {
if (null != loc) {
Message msg = mHandler.obtainMessage();
msg.obj = loc;
msg.what = Utils.MSG_LOCATION_FINISH;
mHandler.sendMessage(msg);
}
}
Handler mHandler = new Handler() {
public void dispatchMessage(android.os.Message msg) {
switch (msg.what) {
//定位完成
case Utils.MSG_LOCATION_FINISH:
String result = "";
try {
AMapLocation loc = (AMapLocation) msg.obj;
result = Utils.getLocationStr(loc, 1);
strMsg = result.split(",");
Toast.makeText(MainActivity.this, "定位成功", Toast.LENGTH_LONG).show();
textView.setText("地址:" + strMsg[0] + "\n" + "经 度:" + strMsg[1] + "\n" + "纬 度:" + strMsg[2]);
latLonPoint= new LatLonPoint(Double.valueOf(strMsg[2]), Double.valueOf(strMsg[1]));
initMap();
} catch (Exception e) {
Toast.makeText(MainActivity.this, "定位失败", Toast.LENGTH_LONG).show();
}
break;
default:
break;
}
};
};
public void Location() {
// TODO Auto-generated method stub
try {
locationClient = new AMapLocationClient(this);
locationOption = new AMapLocationClientOption();
// 设置定位模式为低功耗模式
locationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Battery_Saving);
// 设置定位监听
locationClient.setLocationListener(this);
locationOption.setOnceLocation(true);//设置为单次定位
locationClient.setLocationOption(locationOption);// 设置定位参数
// 启动定位
locationClient.startLocation();
mHandler.sendEmptyMessage(Utils.MSG_LOCATION_START);
} catch (Exception e) {
Toast.makeText(MainActivity.this, "定位失败", Toast.LENGTH_LONG).show();
}
}
/**
* 响应逆地理编码
*/
public void getAddress(final LatLonPoint latLonPoint) {
RegeocodeQuery query = new RegeocodeQuery(latLonPoint, 200,
GeocodeSearch.AMAP);// 第一个参数表示一个Latlng,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系
geocoderSearch.getFromLocationAsyn(query);// 设置同步逆地理编码请求
}
/**
* 地理编码查询回调
*/
@Override
public void onGeocodeSearched(GeocodeResult result, int rCode) {
}
/**
* 逆地理编码回调
*/
@Override
public void onRegeocodeSearched(RegeocodeResult result, int rCode) {
if (rCode == 1000) {
if (result != null && result.getRegeocodeAddress() != null
&& result.getRegeocodeAddress().getFormatAddress() != null) {
Toast.makeText(MainActivity.this,result.getRegeocodeAddress().getFormatAddress()
+ "附近",Toast.LENGTH_LONG).show();
aMap.animateCamera(CameraUpdateFactory.newLatLngZoom(
AMapUtil.convertToLatLng(latLonPoint), 15));
geoMarker.setPosition(AMapUtil.convertToLatLng(latLonPoint));
} else {
}
} else {
}
}
/**
* 方法必须重写
*/
@Override
public void onResume() {
super.onResume();
mapView.onResume();
}
/**
* 方法必须重写
*/
@Override
public void onPause() {
super.onPause();
mapView.onPause();
}
/**
* 方法必须重写
*/
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
@Override
public void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
}
AndroidManifest.xml中加入权限
<!--允许程序打开网络套接字-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 定位 -->
<!-- 用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
<!--允许程序设置内置sd卡的写权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--允许程序获取网络状态-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--允许程序访问WiFi网络信息-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--允许程序读写手机状态和身份-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--允许程序访问CellID或WiFi热点来获取粗略的位置-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
如果只实现高德定位可查看:
Android Studio 中实现高德定位并获取相应信息
讲的很详细;有疑问的请留言。
分享到:
相关推荐
Android开发项目时常常会遇到定位这个功能,本案例主要是AndroidStudio实现高德定位。 博客地址:http://blog.csdn.net/dickyqie/article/details/56840100
Android Studio调用高德地图api(前面文章中所记录的下载包,可根据文章进行使用),可实现地图显示,定位,导航等功能。 将该文件进行压缩,放到libs里面,右键点击Add As Library...将该jar包加载到build.gradle...
在Android应用开发中,集成高德地图以实现定位和地图显示功能是一项常见的需求。本教程将详细介绍如何在Android项目中实现这一功能,主要分为以下几个步骤: 1. **添加依赖库** 在`build.gradle`(Module: app)...
在Android开发中,集成高德地图API可以实现丰富的地图功能,包括地图的显示、定位、地理编码和反地理编码,以及地图上的点击事件处理。以下将详细解释这些知识点。 1. 地图显示: 首先,需要在AndroidManifest.xml...
总结,实现“android之基于高德地图的移动轨迹的可视化”涉及的关键知识点包括: 1. 高德地图SDK的集成与配置。 2. MapView的使用和地图初始化。 3. 定位服务的开启与位置监听。 4. Polyline的使用,绘制轨迹线。 5....
综上所述,Android高德地图Demo是一个学习和实践地图API的好工具,可以帮助开发者快速掌握如何在Android应用中集成地图服务,实现定位和轨迹绘制等基本功能。通过不断探索和实践,开发者可以进一步发掘高德地图API的...
本示例主要讲解如何在Android应用中使用高德地图API实现2D定位功能,适合初学者入门。首先,我们需要了解一些基础知识: 1. **申请高德地图API Key**: 在使用高德地图服务前,你需要在高德地图开放平台...
以上就是如何在Android Studio 3.0中使用百度地图SDK实现经纬度定位和地图类型切换的基本步骤。通过深入学习和实践,你可以进一步定制地图功能,如添加标记、覆盖物、路径规划等,以满足各种复杂需求。记得在实际...
1.项目使用了高德最新的2D地图jar包;2.复制粘贴MainActivity.java到自己的项目;3.复制粘贴activity_main.xml到自己的项目;4.复制libs中的文件到自己的项目,将jar包“add as library”;5.自己项目的环境配置按照...
"Android高德地图POI搜索地点Demo"是一个实际应用案例,它展示了如何利用高德地图API来实现地点的搜索和显示功能。在这个项目中,开发者不仅实现了基本的POI(Point of Interest,兴趣点)搜索,还处理了锚点的显示...
高德地图作为国内领先的地图服务提供商,提供了强大的API和SDK,使得开发者能够轻松地在自己的应用中实现地图展示和导航功能,而无需让用户跳转到其他应用。下面我们将详细探讨如何在Android应用中集成高德地图的...
在Android开发中,集成高德地图API是一个常见的需求,它能为应用提供地图展示、定位、路线规划等功能。本文将详细介绍如何在Android项目中初始化并运行一个基本的高德地图Demo。 首先,我们需要在Android Studio中...
本文将详细讲解如何使用Android Studio结合谷歌地图SDK来实现地图定位、实时位置更新、坐标与海拔显示以及轨迹查询等功能。 首先,我们需要在Android Studio中创建一个新的项目,并在项目的build.gradle文件中添加...
在Android平台上,高德地图搜索是一项重要的功能,它允许开发者集成地图服务,为用户提供精确、高效的地理信息查询和导航服务。高德地图API为开发者提供了丰富的接口,包括地点搜索、路线规划、逆地理编码等,使得...
在本项目中,"高德地图导航源代码"是一个基于Android Studio开发的移动应用程序,它提供了全面的导航功能,包括步行、汽车和自行车导航,并具备语音提示服务。这个项目是开发者社区的一个宝贵资源,可以帮助学习者...
总之,创建一个基于Android的高德地图应用涉及到Android Studio环境的配置、高德地图SDK的集成、API密钥的获取、必要的权限声明,以及地图组件的使用和功能扩展。通过不断学习和实践,你可以构建出满足各种需求的...
本文将深入讲解如何在Android Studio中使用百度地图API实现定位功能,并提供关键步骤的详细说明。 首先,你需要在百度地图开放平台(http://lbsyun.baidu.com/)注册账号并创建应用,然后申请API密钥(Key)。这个...
以上步骤详细介绍了如何在Android Studio中集成百度地图SDK并显示地图。你可以根据项目需求进一步扩展,如实现路线规划、热力图等功能。通过不断学习和实践,你将在Android地图开发方面变得更加熟练。
3. **Android权限管理**:由于涉及到GPS定位和地图服务,项目中必然包含了如ACCESS_FINE_LOCATION等敏感权限的申请和管理。开发者需要了解Android的权限模型,特别是在Android 6.0(API级别23)之后引入的运行时权限...