安卓:百度地图开发(超详细)

您所在的位置:网站首页 sdk的使用和开发流程 安卓:百度地图开发(超详细)

安卓:百度地图开发(超详细)

2024-07-11 16:59| 来源: 网络整理| 查看: 265

目录

一、百度地图介绍

1. MapView类:

2. BaiduMap类:

3. GeoCoder类:

4.GeoCodeOption类:

5.GeoCodeResult类:

6. LocationClient类:

7.LocationClientOption 类:

8. RoutePlanSearch类:

9.LatLng 类:

10. PoiSearch 类: 

11.PoiResult 类:

12.PoiInfo 类:

13.PoiOverlay 类:

14.MarkerOptions类:

15.MapStatusUpdate类:

二、使用例子

例1:获取当前位置:

 MainActivity :

 activity_main:

 AndroidManifest:

 运行结果

一、百度地图介绍

        百度地图SDK是一套供开发者使用的软件开发工具包(SDK),用于在Android应用程序中集成和使用百度地图功能。通过使用百度地图SDK,开发者可以实现在自己的应用中显示地图、获取定位信息、进行搜索、导航等功能。

        百度地图SDK提供了许多常用的类和方法,用于实现各种地图相关功能。以下是一些常用的类及其方法:

1. MapView类:

        MapView 类是百度地图SDK提供的一个控件类,用于在应用程序的界面上显示地图。它是一个自定义的 View,可以与 BaiduMap 类关联,实现地图的显示和交互功能。 

  常用方法: 

   getMap():获取百度地图对象(BaiduMap)的实例。   onResume():在Activity的生命周期方法中调用,用于恢复地图控件的绘制和定位功能。   onPause():在Activity的生命周期方法中调用,用于暂停地图控件的绘制和定位功能。   onDestroy():在Activity的生命周期方法中调用,用于销毁地图控件。 2. BaiduMap类:

        BaiduMap 类是百度地图SDK中的核心类,用于管理和操作地图。它提供了一系列方法和接口,用于显示地图、控制地图状态、添加覆盖物、定位等功能。 

常用方法:  

   setMapType():设置地图显示类型,如普通地图、卫星地图等。   setMapStatus():设置地图的状态,包括中心点坐标、缩放级别、倾斜角度和旋转角度等。   addOverlay():添加覆盖物(Overlay),如标记点(Marker)、折线(Polyline)和多边形(Polygon)等。   clear():清除地图上的所有覆盖物。   setOnMapClickListener():设置地图点击事件监听器。   setOnMarkerClickListener():设置标记点点击事件监听器。 3. GeoCoder类:

        GeoCoder 类是百度地图SDK提供的一个地理编码和反地理编码工具类,用于将地址信息与地理坐标之间进行转换。通过 GeoCoder 类,开发者可以实现将地址解析为经纬度坐标(地理编码),或者将经纬度坐标解析为地址信息(反地理编码)。 

常用方法:  

   newInstance():创建 GeoCoder 实例。   setOnGetGeoCodeResultListener():设置地理编码查询结果监听器。   setOnGetReverseGeoCodeResultListener():设置反地理编码查询结果监听器。   geocode():发起地理编码查询,将地址信息转换为经纬度坐标。   reverseGeoCode():发起反地理编码查询,将经纬度坐标转换为地址信息。 4.GeoCodeOption类:

        GeoCodeOption类是百度地图API中的一个选项类,用于设置地理编码的参数和选项。地理编码是将地理位置转换为对应的经纬度坐标的过程。

常用方法

address(String address):设置待编码的地址信息。

city(String city):设置地址所在的城市名。

retCoordType(String coordType):设置返回结果的坐标类型。可选参数包括:"bd09ll"(百度坐标,默认值)、"gcj02"(国测局坐标)和"wgs84"(WGS-84坐标)。

getAddress():获取待编码的地址信息。

getCity():获取地址所在的城市名。

getRetCoordType():获取返回结果的坐标类型。

5.GeoCodeResult类:

        GeoCodeResult类是百度地图API中用于表示地理编码结果的类。通过该类,可以获取地理编码的查询结果信息,包括位置坐标、地址描述等。 

getLocation():获取地理编码的位置坐标(LatLng对象)。getAddress():获取地理编码结果的地址描述。getBusinessCircle():获取地理编码结果所属的商圈名称。getSematicDescription():获取地理编码结果的语义化描述信息,即更详细的文字描述。 6. LocationClient类:

         LocationClient 类是百度定位SDK提供的核心类,用于实现设备的定位功能。通过 LocationClient 类,开发者可以获取设备的当前位置信息,包括经纬度坐标、速度、方向等。

常用方法:  

   registerLocationListener():注册定位监听器。   start():开始定位。   stop():停止定位。 7.LocationClientOption 类:

  LocationClientOption 类是百度地图定位 SDK 中的一个配置类,用于设置定位相关的参数和选项。通过创建 LocationClientOption 对象并对其进行适当的配置,可以实现更精确和个性化的定位功能。

常用方法

setLocationMode(LocationClientOption.LocationMode mode):设置定位模式,包括三种模式:

Hight_Accuracy:高精度模式,同时使用 GPS 和网络定位。Battery_Saving:低功耗模式,只使用网络定位。Device_Sensors:仅使用 GPS 定位。

setCoorType(String coorType):设置返回的定位结果坐标系类型,包括:

bd09ll:百度经纬度坐标(默认)。gcj02:国测局加密经纬度坐标。bd09:百度墨卡托坐标。

setScanSpan(int scanSpan):设置定位间隔时间,单位为毫秒。设定的值大于等于 1000ms 才有效。

setIsNeedAddress(boolean isNeedAddress):设置是否需要获取地址信息,默认为 false。

setOpenGps(boolean isOpenGps):设置是否打开 GPS,默认为 false。

setIsNeedLocationDescribe(boolean isNeedLocationDesc):设置是否需要位置描述信息,默认为 false。

setIsNeedLocationPoiList(boolean isNeedLocationPoiList):设置是否需要周边 POI 信息,默认为 false。

setIsIgnoreCacheException(boolean isIgnoreCacheException):设置是否忽略 GPS 定位失败时的异常,默认为 false。

setEnableSimulateGps(boolean enableSimulateGps):设置是否允许模拟 GPS 位置,默认为 false。

8. RoutePlanSearch类:

        RoutePlanSearch 类是百度地图SDK提供的路线规划搜索类,用于实现不同交通方式的路线规划功能。通过 RoutePlanSearch 类,开发者可以根据起点和终点的坐标,进行驾车、步行、公交等多种交通方式的路线规划,并获取详细的路线信息。

常用方法:  

   setOnGetRoutePlanResultListener():设置路径规划结果监听器。   drivingSearch():发起驾车路线规划。   walkingSearch():发起步行路线规划。   transitSearch():发起公交路线规划。 9.LatLng 类:

        LatLng 类是百度地图SDK提供的一个表示经纬度坐标的类。它用于存储地理位置的经度和纬度信息,并提供了一些方法来获取和设置经纬度值。 

常用方法:  

latitude():获取纬度值。longitude():获取经度值。equals(LatLng other):判断当前 LatLng 对象是否与另一个 LatLng 对象相等。toString():返回 LatLng 对象的字符串表示。  10. PoiSearch 类: 

        PoiSearch 类是百度地图SDK提供的一个兴趣点搜索类,用于实现地图上的兴趣点检索功能。通过 PoiSearch 类,开发者可以根据关键词、地理位置等条件进行兴趣点的搜索,并获取相关的搜索结果。

常用方法:  

 newInstance():创建 PoiSearch 实例。searchInCity(PoiCitySearchOption option):在指定城市内搜索兴趣点。需要创建一个 PoiCitySearchOption 对象,并设置要搜索的城市名称、关键词等参数,然后调用该方法进行搜索。searchNearby(PoiNearbySearchOption option):在指定位置附近搜索兴趣点。需要创建一个 PoiNearbySearchOption 对象,并设置中心点坐标、搜索半径、关键词等参数,然后调用该方法进行搜索。searchInBound(PoiBoundSearchOption option):在指定矩形区域内搜索兴趣点。需要创建一个 PoiBoundSearchOption 对象,并设置矩形区域的左下角和右上角坐标、关键词等参数,然后调用该方法进行搜索。setOnGetPoiSearchResultListener(OnGetPoiSearchResultListener listener):设置兴趣点搜索结果的监听器。需要实现 OnGetPoiSearchResultListener 接口,并将其注册给 PoiSearch 对象,以接收搜索结果的回调。searchPoiDetail(PoiDetailSearchOption option):根据兴趣点的 UID 获取详细信息。需要创建一个 PoiDetailSearchOption 对象,并设置兴趣点的 UID,然后调用该方法进行详情查询。searchPoiIndoor(PoiIndoorOption option):在室内地图中搜索兴趣点。需要创建一个 PoiIndoorOption 对象,并设置室内ID、关键词等参数,然后调用该方法进行搜索。searchPoiPage(int pageNum):加载下一页的搜索结果。需要指定要加载的页码,通过设置之前的搜索选项对象的 pageNum 属性来实现分页加载。destroy():销毁 PoiSearch 对象,释放相关资源。 11.PoiResult 类:

        PoiResult 类是百度地图SDK中的一个类,用于表示兴趣点搜索的结果集。它包含了符合搜索条件的一组兴趣点数据,并提供了相关的方法来获取和操作这些数据。

getAllPoi():获取搜索到的所有结果。error:表示搜索结果的错误码。  12.PoiInfo 类:

        PoiInfo 类是百度地图SDK中的一个类,用于表示兴趣点的信息。它包含了兴趣点的名称、地址、经纬度坐标等详细信息,并提供了相关的方法来获取和操作这些数据。 

name:POI 名称。address:POI 地址。 13.PoiOverlay 类:

        PoiOverlay 类是百度地图SDK中的一个类,用于在地图上绘制兴趣点标注覆盖物。它可以将 PoiResult 中的兴趣点数据在地图上展示,并提供了一些方法用于自定义标注样式和点击事件处理。

setData():设置搜索到的 POI 数据。addToMap():将兴趣点标注添加到地图上。zoomToSpan():缩放地图以适应所有兴趣点。 14.MarkerOptions类:

        MarkerOptions类是百度地图API中的一个选项类,用于设置标记点(Marker)的参数和选项。标记点是地图上用于标识某个位置的图标,常用于显示兴趣点、位置标注等。 

position(LatLng position):设置标记点的经纬度坐标。icon(BitmapDescriptor icon):设置标记点的图标资源,可以是本地图片、远程图片或内置的图标样式。使用BitmapDescriptorFactory类创建BitmapDescriptor对象,并将其作为参数传入。zIndex(int zIndex):设置标记点的堆叠顺序,值越大表示越靠前。perspective(boolean perspective):设置标记点的透视效果,即倾斜角度。true表示启用透视效果,false表示不启用。draggable(boolean draggable):设置标记点是否可拖拽。true表示可拖拽,false表示不可拖拽。animateType(MarkerAnimateType animateType):设置标记点的动画效果类型。可以使用MarkerAnimateType枚举类中的常量值,如MarkerAnimateType.none、MarkerAnimateType.grow、MarkerAnimateType.jump、MarkerAnimateType.drop。getIcon():获取标记点的图标资源。getPosition():获取标记点的经纬度坐标。getZIndex():获取标记点的堆叠顺序。isPerspective():判断标记点是否启用透视效果。isDraggable():判断标记点是否可拖拽。getAnimateType():获取标记点的动画效果类型。 15.MapStatusUpdate类:

        MapStatusUpdate类是百度地图API中用于设置地图状态更新的类。通过该类,可以对地图进行平移、缩放、旋转等操作。 

newLatLng(LatLng latLng):创建一个以指定经纬度为中心点的地图状态更新对象。newLatLngBounds(LatLngBounds bounds):创建一个以指定经纬度边界为显示范围的地图状态更新对象。newMapStatus(MapStatus mapStatus):创建一个以指定地图状态为基础的地图状态更新对象。newLatLngZoom(LatLng latLng, float zoom):创建一个以指定经纬度为中心点、指定缩放级别的地图状态更新对象。zoomTo(float zoom):创建一个将地图缩放到指定级别的地图状态更新对象。zoomBy(float amount):创建一个按照指定比例增加(正值)或减小(负值)地图缩放级别的地图状态更新对象。rotate(float rotate):创建一个以指定角度顺时针旋转地图的地图状态更新对象。overlook(float overlook):创建一个以指定角度俯视地图的地图状态更新对象。scrollBy(int offsetX, int offsetY):创建一个沿屏幕像素坐标偏移地图中心点的地图状态更新对象。 二、使用例子 例1:获取当前位置:  MainActivity : package com.example.location; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import android.Manifest; import android.content.pm.PackageManager; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.mapapi.SDKInitializer; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.BitmapDescriptor; import com.baidu.mapapi.map.BitmapDescriptorFactory; import com.baidu.mapapi.map.MapStatusUpdate; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.MarkerOptions; import com.baidu.mapapi.model.LatLng; import com.baidu.mapapi.search.core.SearchResult; import com.baidu.mapapi.search.geocode.GeoCodeOption; import com.baidu.mapapi.search.geocode.GeoCodeResult; import com.baidu.mapapi.search.geocode.GeoCoder; import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener; import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult; public class MainActivity extends AppCompatActivity { LocationClient mLocationClient; MapView mMapView; BaiduMap mBaiduMap; private Button select; private EditText editText; boolean isFirstLocate = true; boolean isFirstText = true; TextView tv_Lat; // 经度 TextView tv_Lon; // 纬度 TextView tv_Add; // 地址 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 初始化地图应用 SDKInitializer.setAgreePrivacy(this.getApplicationContext(),true); LocationClient.setAgreePrivacy(true); SDKInitializer.initialize(this.getApplicationContext()); setContentView(R.layout.activity_main); mMapView = findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap(); tv_Lat = findViewById(R.id.tv_Lat); tv_Lon = findViewById(R.id.tv_Lon); tv_Add = findViewById(R.id.tv_Add); select = findViewById(R.id.btn_search); editText = findViewById(R.id.address); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},1); }else { requestLocation(); } select.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String address = editText.getText().toString(); if (address!=null){ searchGeoCode(address); }else { Toast.makeText(MainActivity.this, "请输入地点", Toast.LENGTH_SHORT).show(); } } }); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode){ case 1: if (grantResults[0]!=PackageManager.PERMISSION_GRANTED){ Toast.makeText(this, "没有定位权限!", Toast.LENGTH_SHORT).show(); finish(); }else{ requestLocation(); } } super.onRequestPermissionsResult(requestCode, permissions, grantResults); } private void requestLocation() { // 定位前初始化 initLocation(); // 发起定位 mLocationClient.start(); } private void initLocation() { // LocationClient.setAgreePrivacy(true); try { mLocationClient = new LocationClient(getApplicationContext()); mLocationClient.registerLocationListener(new MyLocationListener()); // 定位客户端操作 LocationClientOption option = new LocationClientOption(); // 设置扫描时间 option.setScanSpan(1000); // 设置定位参数 option.setCoorType("bd09ll"); // 设置坐标类型为百度经纬度 option.setIsNeedAddress(true); // 设置需要获取地址信息 // 设置定位模式 option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); // option.setLocationMode(LocationClientOption.LocationMode.Battery_Saving); // option.setLocationMode(LocationClientOption.LocationMode.Device_Sensors); option.setIsNeedAddress(true); // 设置需要地址信息 // 保存定位参数 mLocationClient.setLocOption(option); } catch (Exception e) { e.printStackTrace(); } } // 内部类,百度位置监听器 private class MyLocationListener implements BDLocationListener{ @Override public void onReceiveLocation(BDLocation bdLocation) { if (isFirstText){ tv_Lat.setText(bdLocation.getLatitude()+""); tv_Lon.setText(bdLocation.getLongitude()+""); tv_Add.setText(bdLocation.getAddrStr()); isFirstText = false; } // GPS 定位或网格定位时 if (bdLocation.getLocType()==BDLocation.TypeGpsLocation||bdLocation.getLocType()==BDLocation.TypeNetWorkLocation){ navigateTo(bdLocation); } } private void navigateTo(BDLocation bdLocation) { if (isFirstLocate){ LatLng ll = new LatLng(bdLocation.getLatitude(),bdLocation.getLongitude()); MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll); // 以动画更新方式,实现对手势引起的地图状态的更新 mBaiduMap.animateMapStatus(update); // 创建自定义标记 BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.arrow_icon); MarkerOptions markerOptions = new MarkerOptions().position(ll).icon(bitmap).anchor(0.5f, 0.5f); mBaiduMap.addOverlay(markerOptions); isFirstLocate = false; } } } @Override protected void onResume() { super.onResume(); mMapView.onResume(); } // 实现检索地点功能 private void searchGeoCode(String address) { mBaiduMap.clear(); // 清除标记点 GeoCoder geoCoder = GeoCoder.newInstance(); GeoCodeOption geoCodeOption = new GeoCodeOption(); geoCodeOption.address(address); geoCodeOption.city(address); geoCoder.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() { @Override public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) { if (geoCodeResult == null || geoCodeResult.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(MainActivity.this, "检索错误", Toast.LENGTH_SHORT).show(); } else { LatLng latLng = geoCodeResult.getLocation(); MarkerOptions markerOptions = new MarkerOptions() .position(latLng) .icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow_icon)); mBaiduMap.addOverlay(markerOptions); MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newLatLngZoom(latLng, 15); tv_Lat.setText(" "+latLng.latitude); // 经度 tv_Lon.setText(" "+latLng.longitude); // 纬度 tv_Add.setText(geoCodeResult.getAddress()); // 地址 mBaiduMap.setMapStatus(mMapStatusUpdate); } } @Override public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) { if (reverseGeoCodeResult == null || reverseGeoCodeResult.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(MainActivity.this, "获取地址信息失败", Toast.LENGTH_SHORT).show(); } else { String address = reverseGeoCodeResult.getAddress(); Toast.makeText(MainActivity.this, address, Toast.LENGTH_SHORT).show(); } } }); geoCoder.geocode(geoCodeOption); } @Override protected void onPause() { super.onPause(); mMapView.onPause(); } @Override protected void onDestroy() { super.onDestroy(); mMapView.onDestroy(); } }  activity_main:  AndroidManifest:  运行结果:

未完待续。。。



【本文地址】


今日新闻


推荐新闻


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