第三方:高德地图 蓝点,定位,路线规划

编程入门 行业动态 更新时间:2024-10-05 15:27:51

<a href=https://www.elefans.com/category/jswz/34/1770258.html style=第三方:高德地图 蓝点,定位,路线规划"/>

第三方:高德地图 蓝点,定位,路线规划

 

第一步:

如何申请 Key

1、创建新应用

进入控制台,创建一个新应用。如果您之前已经创建过应用,可直接跳过这个步骤。

 

 

2、添加新Key

在DOS命令窗口输入下面命令即可

C:\Users\WIN7\.android>keytool -list -v -keystore debug.keystore
输入密钥库口令:

*****************  WARNING WARNING WARNING  *****************
* 存储在您的密钥库中的信息的完整性  *
* 尚未经过验证!  为了验证其完整性, *
* 必须提供密钥库口令。                  *
*****************  WARNING WARNING WARNING  *****************

密钥库类型: JKS
密钥库提供方: SUN

您的密钥库包含 1 个条目

别名: androiddebugkey
创建日期: 2018-4-19
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=Android Debug, O=Android, C=US
发布者: CN=Android Debug, O=Android, C=US
序列号: 4b188cff
有效期开始日期: Thu Apr 19 09:23:28 CST 2018, 截止日期: Sat Apr 11 09:23:28 CST 2048
证书指纹:
         MD5: 4C:B5:90:BB:91:7F:8A:4A:59:75:2F:7D:DD:03:11:C3

         此SHA1值需要在自己电脑上按步骤申请(下面SHA1值无效)自己获取
         SHA1: AA:02:51:92:DE:DA:E7:C4:95:0B:53:D2:90:3F:56:D1:E3:B0:63:EF;FF
         SHA256: 97:D2:46:AD:57:7F:47:FC:55:12:F8:35:B1:8A:30:06:57:14:F5:B4:E2:79:6A:C8:52:0D:16:85:E4:F5:9E:63
         签名算法名称: SHA256withRSA
         版本: 3

第3步 在Android 清单配置文件中AndroidManifest.xml中

<manifest xmlns:android=""package="com.example.win7.mysmalltraining01">

获取包名。

在创建的应用上点击"添加新Key"按钮,在弹出的对话框中,依次输入应用名名称,选择绑定的服务为“Android平台SDK”,输入发布版安全码  SHA1、调试版安全码 SHA1、以及 Package,如下图所示:

需要注意的是: 1个KEY只能用于一个应用(多渠道安装包属于多个应用),1个Key在多个应用上使用会出现服务调用失败。

在阅读完高德地图API服务条款后,勾选此选项,点击“提交”,完成 Key 的申请,此时您可以在所创建的应用下面看到刚申请的 Key 了。

第 4 步 把key添加到清单配置文件AndroidManifest.xml中

添加到application和activity并列

 注意:此value值为开发者申请的key,此图片key值无效

<meta-data android:name="com.amap.api.v2.apikey" android:value="860c5b48aa711d3ed495b1002e01ce7e">//开发者申请的key
</meta-data>
<service android:name="com.amap.api.location.APSService"></service>

第 5 步 :在清单配置文件AndroidManifest.xml中添加所需权限

 <!--允许程序打开网络套接字--><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" /><!--允许程序访问CellID或WiFi热点来获取粗略的位置--><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><!--用于进行网络定位--><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission><!--用于访问GPS定位--><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission><!--用于获取运营商信息,用于支持提供运营商信息相关的接口--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission><!--用于访问wifi网络信息,wifi信息会用于进行网络定位--><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission><!--用于获取wifi的获取权限,wifi信息会用来进行网络定位--><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission><!--用于访问网络,网络定位需要上网--><uses-permission android:name="android.permission.INTERNET"></uses-permission><!--用于读取手机当前的状态--><uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission><!--用于写入缓存数据到扩展存储卡--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission><!--用于申请调用A-GPS模块--><uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission><!--用于申请获取蓝牙信息进行室内定位--><uses-permission android:name="android.permission.BLUETOOTH"></uses-permission><uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

 

第6步:添加 jar 文件:

将下载的地图 SDK 的 jar包复制到工程(此处截图以官方示例Demo为例子)的 libs 目录下,如果有老版本 jar 包在其中,请删除。如图所示:

别忘记把jar包导入到项目中

第7步 :在app 下build.gradle 添加sourceSets

android {sourceSets {main {jniLibs.srcDirs = ['libs']}}
}

 

第8步:把将下载谷歌的地图Demo中的res文件覆盖到项目中的res文件夹注意values文件夹不要覆盖,将文件打开,将里面的内容代码一个一个粘进去

如图所示:

 

 

 第9步:把下载谷歌的地图Demo中的overlay文件和util文件2个类添加到项目中

注意:复制下面的4个类 R文件包不要导错 ,不对的导包文件直接删除即可

 

 

 第10步:在xml布局文件中添加

首先在布局xml文件中添加地图控件:

XML


<com.amap.api.maps.MapViewandroid:id="@+id/map"android:layout_width="match_parent"android:layout_height="match_parent"/>

第11步:在Activity中添加声明周期的方法

在项目中使用地图的时候需要注意,需要合理的管理地图生命周期,这非常的重要。将下列声明周期的方法复制到Acitivity中

Java

@Overrideprotected void onDestroy() {super.onDestroy();//在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图mMapView.onDestroy();}@Overrideprotected void onResume() {super.onResume();//在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图mMapView.onResume();}@Overrideprotected void onPause() {super.onPause();//在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制mMapView.onPause();}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState), 保存地图当前的状态mMapView.onSaveInstanceState(outState);}

  第12步: 绘制地图蓝点

public class MainActivity extends AppCompatActivity {private MainActivity mContext;private MapView mMapView;private AMap aMap;private TextView start;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();mContext = MainActivity.this;mMapView.onCreate(savedInstanceState);// 此方法须覆写,虚拟机需要在很多情况下保存地图绘制的当前状态。//初始化地图控制器对象if (aMap == null) {aMap = mMapView.getMap();}MyLocationStyle myLocationStyle;myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);myLocationStyle.showMyLocation(true);aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的StyleaMap.getUiSettings().setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示,非必需设置。aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。getPositioning();}
}

实现效果如图所示:

 

 第13步 :定位当前位置:

public class MainActivity extends AppCompatActivity {private MainActivity mContext;private MapView mMapView;private AMap aMap;private TextView start;public AMapLocationClient mLocationClient = null;//声明定位回调监听器public AMapLocationListener mLocationListener = new MyAMapLocationListener();//声明AMapLocationClientOption对象public AMapLocationClientOption mLocationOption = null;//  定位当前位置的方法 在哪个需要在哪调用@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);initView();mContext = MainActivity.this;mMapView.onCreate(savedInstanceState);// 此方法须覆写,虚拟机需要在很多情况下保存地图绘制的当前状态。//初始化地图控制器对象if (aMap == null) {aMap = mMapView.getMap();}//定位当前位置的方法哪里需要在哪里调用getPositioning();}public void getPositioning() {//初始化定位mLocationClient = new AMapLocationClient(this);//设置定位回调监听mLocationClient.setLocationListener(mLocationListener);//初始化AMapLocationClientOption对象mLocationOption = new AMapLocationClientOption();//获取一次定位结果://该方法默认为false。mLocationOption.setOnceLocation(true);//获取最近3s内精度最高的一次定位结果://设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。mLocationOption.setOnceLocationLatest(true);//设置是否返回地址信息(默认返回地址信息)mLocationOption.setNeedAddress(true);//设置是否允许模拟位置,默认为true,允许模拟位置mLocationOption.setMockEnable(true);//给定位客户端对象设置定位参数mLocationClient.setLocationOption(mLocationOption);//设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//启动定位mLocationClient.startLocation();}class MyAMapLocationListener implements AMapLocationListener {@Overridepublic void onLocationChanged(final AMapLocation aMapLocation) {double latitude = aMapLocation.getLatitude();//获取纬度double longitude = aMapLocation.getLongitude();//获取经度String aoiName = aMapLocation.getAoiName();String aoiName2 = aMapLocation.getPoiName();获取当前所在地址String address = aMapLocation.getCity();获取的当前所在城市start.setText(address);//设置当前城市的位置到UI}}private void initView() {mMapView = (MapView) findViewById(R.id.mapView);start = (TextView) findViewById(R.id.start);}
}

第14步:路线规划

首先设置起点位置→然后设置终点位置→最后规划路线;

我把这3个步骤写成方法了 调用的时候注意就可以了

首先设置起点:起点方法

//设置起点的方法private GeocodeSearch geocoderSearch;
private LatLonPoint latLonPoint;private void qidian() {geocoderSearch = new GeocodeSearch(this);geocoderSearch.setOnGeocodeSearchListener(new GeocodeSearch.OnGeocodeSearchListener() {@Overridepublic void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {}@Overridepublic void onGeocodeSearched(GeocodeResult geocodeResult, int i) {latLonPoint = geocodeResult.getGeocodeAddressList().get(0).getLatLonPoint();zhongdian();}});//起点默认设置为鹤壁 也可以自己定义位置GeocodeQuery query = new GeocodeQuery("鹤壁", "");geocoderSearch.getFromLocationNameAsyn(query);}

  其次:终点的方法:

 设置终点的方法private LatLonPoint latLonPoint1; private void zhongdian() {geocoderSearch = new GeocodeSearch(this);geocoderSearch.setOnGeocodeSearchListener(new GeocodeSearch.OnGeocodeSearchListener() {@Overridepublic void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {}@Overridepublic void onGeocodeSearched(GeocodeResult geocodeResult, int i) {latLonPoint1 = geocodeResult.getGeocodeAddressList().get(0).getLatLonPoint();调用路线规划luxian();}});GeocodeQuery query = new GeocodeQuery("河北", "");geocoderSearch.getFromLocationNameAsyn(query);}

 最后:路线规划的方法

 private RouteSearch routeSearch;// 路线规划的方法private void luxian() {routeSearch = new RouteSearch(this);routeSearch.setRouteSearchListener(new RouteSearch.OnRouteSearchListener() {@Overridepublic void onBusRouteSearched(BusRouteResult busRouteResult, int i) {}@Overridepublic void onDriveRouteSearched(DriveRouteResult result, int errorCode) {aMap.clear();if (errorCode == AMapException.CODE_AMAP_SUCCESS) {if (result != null && result.getPaths() != null) {if (result.getPaths().size() > 0) {final DrivePath drivePath = result.getPaths().get(0);if (drivePath == null) {return;}DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(mContext, aMap, drivePath,result.getStartPos(),result.getTargetPos(), null);drivingRouteOverlay.setNodeIconVisibility(false);drivingRouteOverlay.setIsColorfulline(true);drivingRouteOverlay.removeFromMap();drivingRouteOverlay.addToMap();drivingRouteOverlay.zoomToSpan();} else if (result != null && result.getPaths() == null) {ToastUtil.show(mContext, R.string.no_result);}} else {ToastUtil.show(mContext, R.string.no_result);}} else {ToastUtil.showerror(MainActivity.this, errorCode);}}@Overridepublic void onWalkRouteSearched(WalkRouteResult walkRouteResult, int i) {}@Overridepublic void onRideRouteSearched(RideRouteResult rideRouteResult, int i) {}});RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(latLonPoint, latLonPoint1);RouteSearch.DriveRouteQuery query = new RouteSearch.DriveRouteQuery(fromAndTo, 0, null, null, "");routeSearch.calculateDriveRouteAsyn(query);}

  效果图如图所示:

 

通过以上配置就算完成了 高德地图的 蓝点, 定位 , 和 路线规划!

如有问题 请和我留言

更多推荐

第三方:高德地图 蓝点,定位,路线规划

本文发布于:2024-02-27 16:08:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1707289.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:第三方   路线   地图

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!