【Android

您所在的位置:网站首页 喀什高德地图最新版 【Android

【Android

2024-07-13 12:58| 来源: 网络整理| 查看: 265

文章目录 1. 简介2. 获取高德 Key3. 准备4. 地图5. 定位6. Poi搜索

1. 简介

高德地图 Android SDK 是一套地图开发调用接口,开发者可以轻松地在自己的Android应用中加入地图相关的功能,包括:地图显示(含室内、室外地图)、与地图交互、在地图上绘制、兴趣点搜索、地理编码、离线地图等功能。

2. 获取高德 Key

要使用高德地图首先要去高德开放平台注册成为开发者(http://lbs.amap.com/), 注册成为高德开发者需要分三步:

第一步,注册高德开发者;第二步,去控制台创建应用;第三步,获取Key 在这里插入图片描述 3. 准备

1. 下载并解压 高德地图SDK - 开发包定制下载

2. 向工程中添加地图开发包 2.1 添加 so 文件,在 src/main/ 目录下新建 jniLibs 目录,并将文件放入其中。 1.png

2.2 将 jar 包放入 libs 目录下。然后 右键-选择 Add As Library,导入到工程中。 2.png

4. 地图

1. 配置 AndroidManifest.xml

3. 布局文件

4. 只要在 onCreate() 中添加如下几行代码,高德地图就显示出来了

public class MainActivity extends AppCompatActivity { private MapView mMapView; private AMap mAMap; private MyLocationStyle mLocationStyle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mMapView = findViewById(R.id.map); mMapView.onCreate(savedInstanceState); if (mAMap == null) { mAMap = mMapView.getMap(); } mAMap.getUiSettings().setZoomControlsEnabled(false); mAMap.moveCamera(CameraUpdateFactory.zoomTo(15)); mAMap.setMapTextZIndex(2); mLocationStyle = new MyLocationStyle(); mLocationStyle.interval(2000); mLocationStyle.showMyLocation(true); mAMap.setMyLocationStyle(mLocationStyle); mAMap.setMyLocationEnabled(true); mAMap.setOnMyLocationChangeListener(new AMap.OnMyLocationChangeListener() { @Override public void onMyLocationChange(Location location) { double lat = location.getLatitude(); double lng = location.getLongitude(); Log.e("duo", "onMyLocationChange: lat=" + lat + "|lng=" + lng); } }); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mMapView.onSaveInstanceState(outState); } @Override protected void onResume() { super.onResume(); mMapView.onResume(); } @Override protected void onPause() { super.onPause(); mMapView.onPause(); } @Override protected void onDestroy() { super.onDestroy(); mMapView.onDestroy(); } } 5. 定位 第一种方式 可参考官网,链接在此:http://lbs.amap.com/api/android-location-sdk/guide/android-location/getlocation/ //初始化定位 mLocationClient = new AMapLocationClient(getApplicationContext()); //初始化AMapLocationClientOption对象 mLocationOption = new AMapLocationClientOption(); //设置定位模式为高精度模式。 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); //设置定位回调监听 mLocationClient.setLocationListener(this); //获取一次定位结果 mLocationOption.setOnceLocation(true); //设置是否返回地址信息(默认返回地址信息) mLocationOption.setNeedAddress(true); //给定位客户端对象设置定位参数 mLocationClient.setLocationOption(mLocationOption); //启动定位 mLocationClient.startLocation();

之后在监听器的回调方法内解析 AMapLocation 对象,里面包含地址,省市县街道,地区编码,城市编码等等,可以在此添加标记,定位当前位置,你问我如何把标记固定在屏幕中央?也在这里面:

//----------------------这是位置改变监听------------------------------------ @Override public void onLocationChanged(AMapLocation aMapLocation) { if (aMapLocation != null) { if (aMapLocation.getErrorCode() == 0) { //可在其中解析amapLocation获取相应内容。 LatLng latLng = new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude());//取出经纬度 //添加Marker显示定位位置 if (locationMarker == null) { //如果是空的添加一个新的,icon方法就是设置定位图标,可以自定义 locationMarker = aMap.addMarker(new MarkerOptions() .position(latLng).snippet("最快1分钟到达").draggable(true).setFlat(true)); locationMarker.showInfoWindow();//主动显示indowindow aMap.addText(new TextOptions().position(latLng).text(aMapLocation.getAddress())); //固定标签在屏幕中央 locationMarker.setPositionByPixels(mMapView.getWidth() / 2,mMapView.getHeight() / 2); } else { //已经添加过了,修改位置即可 locationMarker.setPosition(latLng); } //然后可以移动到定位点,使用animateCamera就有动画效果 aMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15));//参数提示:1.经纬度 2.缩放级别 }else { //定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。 Log.e("AmapError","location Error, ErrCode:" +aMapLocation.getErrorCode() + ", errInfo:"+ aMapLocation.getErrorInfo()); } } } 第二种方式 实现 OnMapLoadedListener ,在回调方法中首先添加一个标记在地图中央,之后封装一个方法,开启单次定位即可: aMap.setOnMapLoadedListener(this); //----------------------OnMapLoaded 当地图加载完成时回调此方法------------------------------------------ @Override public void onMapLoaded() { MarkerOptions markerOptions = new MarkerOptions(); markerOptions.setFlat(true); markerOptions.anchor(0.5f, 0.5f); markerOptions.position(new LatLng(0, 0)); markerOptions.snippet("最快1分钟到达").draggable(true).setFlat(true); markerOptions.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.icon_loaction_start))); mPositionMark = aMap.addMarker(markerOptions); mPositionMark.showInfoWindow();//主动显示indowindow mPositionMark.setPositionByPixels(mMapView.getWidth() / 2,mMapView.getHeight() / 2); mLocationTask.startSingleLocate(); }

封装的单次定位方法在此,很简单:

//开启单次定位 public void startSingleLocate() { AMapLocationClientOption option=new AMapLocationClientOption(); option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); option.setOnceLocation(true); mLocationClient.setLocationOption(option); mLocationClient.startLocation(); } 效果图 在这里插入图片描述 布局文件,让按钮悬浮在地图上 6. Poi搜索

先上效果图: 在这里插入图片描述

实现 这边已经提供了两个封装好的类,一个是输入提示 一个是Poi搜索 public class InputTipTask implements InputtipsListener { private static InputTipTask mInputTipTask; private Inputtips mInputTips; private RecomandAdapter mAdapter; Context mContext; public static InputTipTask getInstance(Context context, RecomandAdapter adapter){ if(mInputTipTask==null){ mInputTipTask=new InputTipTask(context); } //单例情况,多次进入DestinationActivity传进来的RecomandAdapter对象会不是同一个 mInputTipTask.setRecommandAdapter(adapter); return mInputTipTask; } public void setRecommandAdapter(RecomandAdapter adapter){ mAdapter=adapter; } private InputTipTask(Context context ){ mInputTips=new Inputtips(context, this); } public void searchTips(String keyWord, String city){ try { mInputTips.requestInputtips(keyWord, city); } catch (AMapException e) { e.printStackTrace(); } } @Override public void onGetInputtips(List tips, int resultCode) { //v3.2.1及以上版本SDK 返回码1000是正常 千万注意 if(resultCode==1000&&tips!=null){ ArrayList positions=new ArrayList(); for(Tip tip:tips){ //经纬度 address city(adcode) positions.add(new PositionEntity(0, 0, tip.getName(),tip.getAdcode())); } mAdapter.setPositionEntities(positions); mAdapter.notifyDataSetChanged(); PoiSearchTask poiSearchTask=new PoiSearchTask(mContext.getApplicationContext(), mAdapter); for(int i = 0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3