百度地图SDK是一套供开发者使用的软件开发工具包(SDK),用于在Android应用程序中集成和使用百度地图功能。通过使用百度地图SDK,开发者可以实现在自己的应用中显示地图、获取定位信息、进行搜索、导航等功能。
百度地图SDK提供了许多常用的类和方法,用于实现各种地图相关功能。以下是一些常用的类及其方法:
MapView 类是百度地图SDK提供的一个控件类,用于在应用程序的界面上显示地图。它是一个自定义的 View,可以与 BaiduMap 类关联,实现地图的显示和交互功能。
常用方法:
BaiduMap 类是百度地图SDK中的核心类,用于管理和操作地图。它提供了一系列方法和接口,用于显示地图、控制地图状态、添加覆盖物、定位等功能。
常用方法:
GeoCoder 类是百度地图SDK提供的一个地理编码和反地理编码工具类,用于将地址信息与地理坐标之间进行转换。通过 GeoCoder 类,开发者可以实现将地址解析为经纬度坐标(地理编码),或者将经纬度坐标解析为地址信息(反地理编码)。
常用方法:
LocationClient 类是百度定位SDK提供的核心类,用于实现设备的定位功能。通过 LocationClient 类,开发者可以获取设备的当前位置信息,包括经纬度坐标、速度、方向等。
常用方法:
RoutePlanSearch 类是百度地图SDK提供的路线规划搜索类,用于实现不同交通方式的路线规划功能。通过 RoutePlanSearch 类,开发者可以根据起点和终点的坐标,进行驾车、步行、公交等多种交通方式的路线规划,并获取详细的路线信息。
常用方法:
LatLng 类是百度地图SDK提供的一个表示经纬度坐标的类。它用于存储地理位置的经度和纬度信息,并提供了一些方法来获取和设置经纬度值。
常用方法:
latitude()
:获取纬度值。longitude()
:获取经度值。equals(LatLng other)
:判断当前 LatLng 对象是否与另一个 LatLng 对象相等。toString()
:返回 LatLng 对象的字符串表示。 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 对象,释放相关资源。PoiResult 类是百度地图SDK中的一个类,用于表示兴趣点搜索的结果集。它包含了符合搜索条件的一组兴趣点数据,并提供了相关的方法来获取和操作这些数据。
getAllPoi()
:获取搜索到的所有结果。error
:表示搜索结果的错误码。 PoiInfo 类是百度地图SDK中的一个类,用于表示兴趣点的信息。它包含了兴趣点的名称、地址、经纬度坐标等详细信息,并提供了相关的方法来获取和操作这些数据。
name
:POI 名称。address
:POI 地址。PoiOverlay 类是百度地图SDK中的一个类,用于在地图上绘制兴趣点标注覆盖物。它可以将 PoiResult 中的兴趣点数据在地图上展示,并提供了一些方法用于自定义标注样式和点击事件处理。
setData()
:设置搜索到的 POI 数据。addToMap()
:将兴趣点标注添加到地图上。zoomToSpan()
:缩放地图以适应所有兴趣点。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.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.geocode.GeoCoder;
import com.baidu.mapapi.search.poi.PoiSearch;
public class MainActivity extends AppCompatActivity {
LocationClient mLocationClient;
MapView mMapView;
BaiduMap mBaiduMap;
boolean isFirstLocate = true;
PoiSearch mPoiSearch;
TextView tv_Lat; // 经度
TextView tv_Lon; // 纬度
TextView tv_Add; // 地址
GeoCoder mGeoCoder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 初始化地图应用
SDKInitializer.setAgreePrivacy(this.getApplicationContext(), true);
LocationClient.setAgreePrivacy(true);
// 初始化百度地图SDK。这个方法必须在使用百度地图相关功能之前调用,否则无法正常使用地图功能。
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);
// search = findViewById(R.id.search);
// // 初始化 PoiSearch 和 GeoCoder 对象
// mPoiSearch = PoiSearch.newInstance();
// mGeoCoder = GeoCoder.newInstance();
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();
}
}
@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() {
try {
mLocationClient = new LocationClient(getApplicationContext());
mLocationClient.registerLocationListener(new MyLocationListener());
// 定位客户端操作
LocationClientOption option = new LocationClientOption();
// 设置扫描时间
option.setScanSpan(1000);
// 设置定位模式
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
option.setIsNeedAddress(true); // 设置需要地址信息
// 保存定位参数
mLocationClient.setLocOption(option);
} catch (Exception e) {
e.printStackTrace();
}
}
// 内部类,百度位置监听器
private class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation bdLocation) {
tv_Lat.setText(String.valueOf(bdLocation.getLatitude()));
tv_Lon.setText(String.valueOf(bdLocation.getLongitude()));
tv_Add.setText(bdLocation.getAddrStr());
// 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();
}
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
// 释放 PoiSearch 和 GeoCoder 对象
// mPoiSearch.destroy();
// mGeoCoder.destroy();
}
}
未完待续。。。