一、初始化一个APP项目

参见我的上一篇文章:https://blog.csdn.net/QiwzDeBLOG/article/details/84701746

前期准备:

  1. 我的项目名称:AmapTestV5;
  2. 我的包名:cn.edu.xidian.amaptestv5,如何查看包名:
  3. 在高德开发网站申请自己APP测试用到的mapkey:如何申请:网上搜搜;

二、下载相关的高德地图包,并导入项目中

因为是要进行路径的搜索,所以需要下载3D地图,下载地址:https://lbs.amap.com/api/android-sdk/download

选择如图所示的几个:

点击下载,下载好之后,点击解压

导入jar包:

选择复制AMap3DMap_6.5.0_AMapNavi_6.5.0_AMapSearch_6.5.0_AMapLocation_4.4.0_20181122.jar:在原来的APP项目下,选择Project,如图所示

点击选择libs文件,

然后粘贴;

然后将jar包导入项目:右键点击jar包,选择弹出界面的add as library,

然后点击 OK就可以了

到现在为止,高德sdk的包就导入成功了,因为我们是3D地图,所以还需要导入SO库,也就是解压后剩余的几个文件夹

导入so库:

首先,在src文件夹下面新建

选择加压后的arm64-v8a,armeabi,armeabi-v7a,x86,x86-64 都复制到jniLibs文件夹下面;

到此为止,所有的依赖包和库都导入完成,开始我们项目内容的设计了。

三、一些参数配置:

mapkey:在高德开发者申请的mapkey,填写到AndroidManifest.xml文件中

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="你的包"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><!--需要添加的内容主要主要是这儿--><meta-dataandroid:name="com.amap.api.v2.apikey"android:value="这儿复制粘贴你申请到的key"/><service android:name="com.amap.api.location.APSService"></service>
<!--这上面为止,--><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/></intent-filter></activity></application>

手机权限的参数设置:

在AndroidManifest.xml文件中,添加一些手机权限的允许

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="cn.edu.xidian.amaptestv5"><!--添加权限--><!--允许程序打开网络套接字--><uses-permission android:name="android.permission.INTERNET" /><!--允许程序设置内置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" /><!--用于进行网络定位--><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><!--用于访问GPS定位--><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><!--用于获取wifi的获取权限,wifi信息会用来进行网络定位--><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/><!--用于读取手机当前的状态--><uses-permission android:name="android.permission.READ_PHONE_STATE"/><!--用于申请调用A-GPS模块--><uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/><!--获取运营商信息,用于支持提供运营商信息相关的接口--><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" /><application。。。。。。。。。。

三、项目设计

在这个项目里,我们设计一个到手机当前位置到指定位置的路径规划,

首先,我们使APP显示地图,activity_main.xml和MainActivity.java 文件的代码如下

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="cn.edu.xidian.amaptestv5.MainActivity"><com.amap.api.maps.MapViewandroid:id="@+id/map"android:layout_width="match_parent"android:layout_height="match_parent"/></RelativeLayout>

MainActivity.java

package cn.edu.xidian.amaptestv5;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
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.LocationSource;
import com.amap.api.maps.MapView;
import com.amap.api.maps.UiSettings;
import com.amap.api.maps.model.LatLng;
import java.text.SimpleDateFormat;
import java.util.Date;public class MainActivity extends AppCompatActivity implements LocationSource,AMapLocationListener {//AMap是地图对象private AMap aMap;private MapView mapView;//声明AMapLocationClient类对象,定位发起端private AMapLocationClient mLocationClient = null;//声明mLocationOption对象,定位参数public AMapLocationClientOption mLocationOption = null;//声明mListener对象,定位监听器private OnLocationChangedListener mListener = null;//标识,用于判断是否只显示一次定位信息和用户重新定位private boolean isFirstLoc = true;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mapView= (MapView) findViewById(R.id.map);mapView.onCreate(savedInstanceState);//创建地图mapView = (MapView) findViewById(R.id.map);//在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),实现地图生命周期管理mapView.onCreate(savedInstanceState);if (aMap == null) {aMap = mapView.getMap();//设置显示定位按钮 并且可以点击UiSettings settings = aMap.getUiSettings();aMap.setLocationSource(this);//设置了定位的监听// 是否显示定位按钮settings.setMyLocationButtonEnabled(true);aMap.setMyLocationEnabled(true);//显示定位层并且可以触发定位,默认是flase}//开始定位location();///Log.d("0000000000",aMap.getMyLocation().toString());}private void location() {//初始化定位mLocationClient = new AMapLocationClient(getApplicationContext());//设置定位回调监听mLocationClient.setLocationListener(this);//初始化定位参数mLocationOption = new AMapLocationClientOption();//设置定位模式为Hight_Accuracy高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//设置是否返回地址信息(默认返回地址信息)mLocationOption.setNeedAddress(true);//设置是否只定位一次,默认为falsemLocationOption.setOnceLocation(false);//设置是否强制刷新WIFI,默认为强制刷新//mLocationOption.setWifiActiveScan(true);//设置是否允许模拟位置,默认为false,不允许模拟位置mLocationOption.setMockEnable(false);//设置定位间隔,单位毫秒,默认为2000msmLocationOption.setInterval(2000);//给定位客户端对象设置定位参数mLocationClient.setLocationOption(mLocationOption);//启动定位mLocationClient.startLocation();}@Overrideprotected void onDestroy() {super.onDestroy();//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理mapView.onDestroy();mLocationClient.stopLocation();//停止定位mLocationClient.onDestroy();//销毁定位客户端。}@Overrideprotected void onResume() {super.onResume();//在activity执行onResume时执行mMapView.onResume (),实现地图生命周期管理mapView.onResume();}@Overrideprotected void onPause() {super.onPause();//在activity执行onPause时执行mMapView.onPause (),实现地图生命周期管理mapView.onPause();}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),实现地图生命周期管理mapView.onSaveInstanceState(outState);}@Overridepublic 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();//地区编码// 如果不设置标志位,此时再拖动地图时,它会不断将地图移动到当前的位置if (isFirstLoc) {//设置缩放级别aMap.moveCamera(CameraUpdateFactory.zoomTo(17));//将地图移动到定位点aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude())));//点击定位按钮 能够将地图的中心移动到定位点mListener.onLocationChanged(aMapLocation);//添加图钉//  aMap.addMarker(getMarkerOptions(amapLocation));//获取定位信息StringBuffer buffer = new StringBuffer();buffer.append(aMapLocation.getCountry() + ""+ aMapLocation.getProvince() + ""+ aMapLocation.getCity() + ""+ aMapLocation.getProvince() + ""+ aMapLocation.getDistrict() + ""+ aMapLocation.getStreet() + ""+ aMapLocation.getStreetNum());Toast.makeText(getApplicationContext(), buffer.toString(), Toast.LENGTH_LONG).show();isFirstLoc = false;}Log.d("111111111111111",aMapLocation.getLatitude() +" ,, " + aMapLocation.getLongitude());} else {//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。Log.e("AmapError", "location Error, ErrCode:"+ aMapLocation.getErrorCode() + ", errInfo:"+ aMapLocation.getErrorInfo());Toast.makeText(getApplicationContext(), "定位失败", Toast.LENGTH_LONG).show();}}}@Overridepublic void activate(OnLocationChangedListener onLocationChangedListener) {mListener = onLocationChangedListener;}@Overridepublic void deactivate() {mListener = null;}}

测试:将手机通过数据线连接电脑,

在这儿会显示你的手机

点击run,等到APP在收集上安装成功后,地图显示和定位就成功了。。

效果图:

基于高德地图的APP路径规划开发相关推荐

  1. 高德地图WebAPI : 驾车路径规划

    参考API 一个demo 获取路径规划返回结果中的两点间最短驾车距离 import java.io.BufferedReader; import java.io.BufferedReader; imp ...

  2. 基于高德地图的app开发打包报错

    在公司做了一个关于寻找停车场的app,需要借助高德地图.项目未完成,老板让打个包,看看效果, 一打包瞬间蛋疼了 .报错如下: [2015-03-02 10:46:25 - MapDemo] Progu ...

  3. android高德地图线路,独立路径规划-路线规划-开发指南-Android 导航SDK | 高德地图API...

    基本介绍 独立路径规划是指路径规划的结果不会自动应用于当前导航,也不会干扰当前的导航,需要手动调用API传入路径规划结果来开始导航.可用于不干扰本次导航的单独路径规划场景,比如路线预览等.适用于驾车/ ...

  4. python调用高德地图api获取路径规划,然后规划好点显示在地图上(农机路径转移)

    我的博客好像跳度比较大,不少内容都涉及,但我是做ros组合导航的,其他的或者是项目设计,或者是因为兴趣,或者是随笔记下来. 无聊写来玩下的小demo,本来试图在硕士期间研究下这个课题即农机从仓库到田间 ...

  5. jq高德地图API实现路径规划及起点途径点终点设置

    $(function () {init();//初始化地图plugins();//插件加载menus(); }) var map; var placeSearch; var lng1; var lat ...

  6. 基于高德地图Windows Phone API 快速开发地图相关APP(二)

    基础知识前面做过介绍 http://www.cnblogs.com/piaocz/archive/2012/08/14/2638097.html 下面说说 分层管理覆盖物的功能: 我们把不同的覆盖物 ...

  7. 结合奥维地图与百度地图api进行路径规划开发测试(python、HTML)

    第一步:奥维地图如何得到规划路径上轨迹点的经纬度(参见我之前的博客). 第二步:各种坐标系转换,选择对应转换坐标系以及输入输出文件路径后可以直接调用(python批量转换,每次运行前清空输出文件res ...

  8. 基于高德地图开发 Web 应用

    文章目录 写在前面 为什么选择高德地图?对比腾讯.百度.OpenLayers OpenLayers 腾讯地图 百度地图 高德地图 基本的开发步骤,开始实现自己的地图应用 快速掌握 API 模块.架构. ...

  9. 只用一个marker 替换 高德_Android基于高德地图完全自定义Marker的实现方法

    前言 相信做地图社交类APP开发的大家都知道,一般情况下,为了整体的美观和用户体验度,我们需要定制化Marker的样式.本文中实现的方式都是基于高德地图的,百度地图也类似,大家可以照葫芦画瓢,废话不多 ...

最新文章

  1. 使用带有用户名和密码的cURL?
  2. 理解word2vec的训练过程
  3. 路由异常的起源-如何影响最终用户?——Vecloud微云
  4. liu四声拼音怎么读_拼音是99%的西安孩子幼升小必备知识!附:幼小拼音学习计划...
  5. vue怎么取消按回车下拉框自动下拉_八月更新第二版,小视频自动竖屏全屏播放,失效校验再次升级!...
  6. Tkinter的Menubutton组件
  7. ldap导入mysql_openLDAP 部署(亲测可用)
  8. 织梦重置mysql数据库密码忘记_织梦cms管理员密码忘记了怎么重置找回?
  9. C语言程序设计 认识函数
  10. win7 64位_VS2010的fftw3配置
  11. 如何在linux下运行php脚本,如何通过Linux命令行使用和运行PHP脚本
  12. 软件测试--IEEE829标准
  13. 【Spring】SpringAOP切面类
  14. python灰色关联度分析_基于灰色关联度重庆万州区边坡稳定影响因素分析
  15. 张铁柱-前端实现《低代码可视化编辑器》(一)思路整理 React-dnd+Ts
  16. 一篇编译内核的详细配置文章[3]
  17. 算法笔记-排序算法(冒泡 选择 插入)
  18. css动画实现跳动的小人
  19. 我的世界服务器掉落率修改,[管理|综合]Scavenger —— 拾荒者,死亡不掉落[1.2.3-1.7.4]...
  20. mysql某字段值转成大写_获取字段值,并使用MySQL将其转换为大写

热门文章

  1. openGauss杭州用户组正式成立啦
  2. linux驱动之系统移植-----uboot常用命令汇总
  3. 另类北漂生活-致敬那些不向困难低头的人
  4. 项目复盘都应当怎样做?
  5. 手机MTP模式连接电脑后文件夹显示不全 小米5s
  6. 从人工智能到人机智能到……
  7. 买入期权和卖出期权两者之间的区别
  8. 如何查找最近最快的dns服务器,如何可以选择适合自己的最快的DNS服务器?
  9. STM32 红外遥控器详解
  10. 改变未来的8种可怕技术