Android 使用高德地图加载定位点

前言

最近做了一个关于公交站点显示的应用,相信很多朋友都遇到过这种从服务器上获取多个定位点加载到地图上显示的需求,今天我就来分享一下我实现这个需求的方式(针对于那些对高德api不熟悉的伙伴,大佬可忽略)

简介

高德开发平台为开发者提供了一整套关于地图操作的SDK和文档。在使用之前需要去申请账号、创建应用并查看集成方式。具体操作请移步至官网
在查看文档之后设置好自己的key,然后按照文档要求集成。下面开始使用示例

示例

其实高德api的开发文档上很多东西就有说明,可以通过查看其官网Demo了解到所有的基本功能,不过还是可能存在文档不清晰导致新手看不懂的问题,这篇博客主要就是进行步骤说明。在xml里面添加地图控件。

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

然后需要重写使用地图控件的activity的生命周期

 MapView mMapView = null;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main);
    //获取地图控件引用
    mMapView = (MapView) findViewById(R.id.map);
    //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
    mMapView.onCreate(savedInstanceState);
  }
  @Override
  protected void onDestroy() {
    super.onDestroy();
    //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
    mMapView.onDestroy();
  }
 @Override
 protected void onResume() {
    super.onResume();
    //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
    mMapView.onResume();
    }
 @Override
 protected void onPause() {
    super.onPause();
    //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
    mMapView.onPause();
    }
 @Override
 protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
    mMapView.onSaveInstanceState(outState);
  } 
}

这些都是基本配置。现在来讲一下如何将从服务器上获取到的多个定位信息通过图标的形势加载到地图上。
首先要明确如何在地图上添加图标,这个操作必须通过AMap这个对象完成,这个对象可以理解为mapView的管理者。
获取AMap对象可通过如下代码获得

aMap = mapView.getMap();

他可以对mapView的功能进行设置
比如采用自定义定位图标可以使用如下代码,第一行代码表示设置定位图标为自定义图标,第二行代码是设置显示当前手机定位的位置,第三行代码是加载当前定位图标的图片资源,R.drawable.gps_point 即为定位图标。

aMap.getUiSettings().setMyLocationButtonEnabled(true);
aMap.setMyLocationEnabled(true);
myLocationStyle.myLocationIcon(BitmapDescriptorFactory
                .fromResource(R.drawable.gps_point));

AMap除了可以添加当前手机定位的图标位置还可以添加多个定位点的位置信息显示在地图上。
首先来看一下怎么添加一个定位点的位置信息到地图上。代码如下所示,MarkerOptions对象为单个定位点图标的设置对象,可以设置定位点是否可以拖动(markerOption.draggable(false)设置为不可拖动),也可以设置定位点的坐标(markerOption.position(LatLng对象,即经纬度对象)),还可以设置其图标(代码中R.drawable.route_stop即为图标的图片资源)。

MarkerOptions markerOption = new MarkerOptions();
markerOption.draggable(false);
markerOption.position(o.getLatLng());
markerOption.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory
                    .decodeResource(getResources(),R.drawable.route_stop)));
markerOption.setFlat(true);
Marker e = aMap.addMarker(markerOption);

除了可以设置定位点的一些功能,还可以让定位点加载一些显示信息,比如显示一个信息窗口,在显示之前必须做信息的加载

 Marker e = aMap.addMarker(markerOption);
 //可以给定位点绑定一个信息对象
 e.setObject(o);
 //允许定位点显示信息窗口
 e.setInfoWindowEnable(true);
 e.setTitle("设置标题");
 e.setSnippet("设置内容");

如果要批量加载可以这样写

private void load(List<LatLng> latlngs){
    MarkerOptions markerOption = new MarkerOptions();
    markerOption.draggable(false);
    markerOption.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory
                    .decodeResource(getResources(),R.drawable.route_stop)));
    markerOption.setFlat(true);
    for(LatLng latLng:latlngs){
        markerOption.position(latLng);
        Marker e = aMap.addMarker(markerOption);
         //可以给定位点绑定一个信息对象
        e.setObject(o);
        //允许定位点显示信息窗口
        e.setInfoWindowEnable(true);
        e.setTitle("设置标题");
        e.setSnippet("设置内容");
    }
}

上述代码中可以批量加载定位点到地图上。其中latlngs参数表示定位点的位置信息集合,即每个定位点经纬度数据集合
因为定位点不光能现在在地图上还需要点击操作
首先需要给定位点小图标设置点击监听

aMap.setOnMarkerClickListener(this);

this表示当前Activity,并且Activity需要实现AMap.OnMarkerClickListener这个接口。在实现这个接口之后重写onMarkerClick方法

@Override
public boolean onMarkerClick(Marker marker) {
     if (marker.isInfoWindowShown()){
         marker.hideInfoWindow();
     }else {
         marker.showInfoWindow();
     }
    return true;
}

上述示例了一个简单的操作,即是判断当前定位点是否显示信息窗口如果显示则关闭,如果没有显示则显示信息窗口。可以回顾一下之前我们写的那个
//可以给定位点绑定一个信息对象
e.setObject(o); 如果要做一些特殊的信息处理,可以在加载之前进行数据的绑定,然后在点击的时候通过marker.getObject()获取那个信息对象进行相应的操作。
当然你在加载了这么多数据之后如果需要将地图的中心点就行切换可以通过以下方法

CameraPosition cameraPosition = new CameraPosition("地图中心点Latlng对象信息","缩放度",0,0);
aMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

总结

好了,基本的东西也就介绍完毕了,读者可根据自己实际项目进行修改,实现需求。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android Studio中使用高德地图定位可以通过以下步骤实现: 1. 在build.gradle文件中添加高德地图SDK的依赖: ``` dependencies { implementation 'com.amap.api:location:5.4.1' } ``` 2. 在AndroidManifest.xml文件中添加定位权限: ``` <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> ``` 3. 在代码中初始化定位服务: ``` // 创建定位客户端 mLocationClient = new AMapLocationClient(this); // 设置定位回调监听 mLocationClient.setLocationListener(this); // 配置定位参数 AMapLocationClientOption option = new AMapLocationClientOption(); option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); option.setNeedAddress(true); option.setInterval(200); mLocationClient.setLocationOption(option); // 启动定位 mLocationClient.startLocation(); ``` 4. 实现定位回调接口: ``` @Override public void onLocationChanged(AMapLocation aMapLocation) { if (aMapLocation != null) { if (aMapLocation.getErrorCode() == ) { // 定位成功 double latitude = aMapLocation.getLatitude(); double longitude = aMapLocation.getLongitude(); String address = aMapLocation.getAddress(); // TODO: 处理定位结果 } else { // 定位失败 String errorInfo = aMapLocation.getErrorInfo(); // TODO: 处理定位失败信息 } } } ``` 以上就是使用高德地图定位的基本步骤,具体实现可以根据需求进行调整。 ### 回答2: Android Studio高德地图定位是Android Studio中的一项很常用的功能。高德地图可以让开发者方便的定位用户所在的位置,同时也可以在地图上进行标记、搜索和路径规划等操作。 在使用Android Studio高德地图定位前,需要先在高德开发者平台上注册一个账号,获取一个对应的appKey。在Android Studio中通过添加相关的依赖库,使用高德地图进行定位,需要在AndroidManifest.xml中添加权限和声明服务。 在进行高德地图定位时,首先需要启动定位服务并进行相关的配置。通过调用AMapLocationClient类的实例化对象,进行定位功能的设置,包括定位模式、定位间隔、定位精度等参数。在进行定位时,需要注册一个AMapLocationListener的回调函数,来处理定位的结果。如果没有开启GPS定位,程序将使用网络定位和基站定位来获取用户的位置。 在定位成功后,可以将获取到的位置通过地图相关的API进行展示。高德地图提供了Marker、Polyline、Circle等多种地图元素,并支持地图缩放、旋转、手势操作等多种交互方式。 总的来说,Android Studio高德地图定位是一个很实用的功能,方便了开发人员对用户所在位置的处理和展示,也可以与其他应用功能结合使用,帮助提高用户体验。 ### 回答3: Android Studio是目前Android应用开发的主流开发工具,在其中使用高德地图进行定位功能的实现较为常见。下面分以下几个方面进行介绍。 一、申请高德地图SDK开发者Key 在使用高德地图SDK进行开发之前,需要向高德官网申请Key,申请方式和详细流程可在高德地图SDK官网找到。获取Key之后,开发者需在AndroidManifest.xml中添加如下代码: ``` <!-- key配置 --> <meta-data android:name="com.amap.api.v2.apikey" android:value="您申请的key" /> ``` 二、引入高德地图SDK 在Android Studio中引入高德地图SDK可以通过Gradle实现,具体步骤如下: 1. 将SDK下载后解压缩,将其中的amap_location_*.aar文件拷贝到项目的libs目录下。 2. 在module级别的build.gradle文件中添加如下代码: ``` dependencies { implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) implementation 'com.amap.api:location:latest-version' } ``` latest-version为高德官方发布的最新版本。 三、使用高德地图SDK实现定位功能 1. 获取定位服务对象,可参考如下代码: ``` mLocationClient = new AMapLocationClient(getApplicationContext()); mLocationOption = new AMapLocationClientOption(); mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); mLocationOption.setOnceLocation(true); mLocationOption.setMockEnable(false); mLocationClient.setLocationOption(mLocationOption); mLocationClient.setLocationListener(mLocationListener); ``` 其中,AMapLocationClient是定位服务类,AMapLocationClientOption为定位参数类。 2. 设置定位参数: ``` mLocationOption = new AMapLocationClientOption(); mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); mLocationOption.setOnceLocation(true); mLocationOption.setMockEnable(false); mLocationClient.setLocationOption(mLocationOption); ``` 设置精度模式为高精度模式,设置为只定位一次,不使用虚拟定位。 3. 定义定位回调方法: ``` mLocationListener = new AMapLocationListener() { @Override public void onLocationChanged(AMapLocation location) { if (location != null) { if (location.getErrorCode() == 0) { //处理定位结果 } else { //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。 Log.e("AmapError","location Error, ErrCode:" + location.getErrorCode() + ", errInfo:" + location.getErrorInfo()); } } } }; ``` 定位成功后,处理定位结果,定位失败时显示错误信息。 4. 启动定位服务: ``` mLocationClient.startLocation(); ``` 启动定位功能。 以上就是使用Android Studio实现高德地图定位功能的相关流程。其中,定位成功后,还可以通过高德地图SDK提供的其他功能实现展示地图、添加标记、路线规划等功能,使应用更加丰富。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值