做網(wǎng)站老師全自動(dòng)引流推廣軟件下載
一、百度地圖介紹
????????百度地圖SDK是一套供開發(fā)者使用的軟件開發(fā)工具包(SDK),用于在Android應(yīng)用程序中集成和使用百度地圖功能。通過使用百度地圖SDK,開發(fā)者可以實(shí)現(xiàn)在自己的應(yīng)用中顯示地圖、獲取定位信息、進(jìn)行搜索、導(dǎo)航等功能。
????????百度地圖SDK提供了許多常用的類和方法,用于實(shí)現(xiàn)各種地圖相關(guān)功能。以下是一些常用的類及其方法:
1. MapView類:
????????MapView 類是百度地圖SDK提供的一個(gè)控件類,用于在應(yīng)用程序的界面上顯示地圖。它是一個(gè)自定義的 View,可以與 BaiduMap 類關(guān)聯(lián),實(shí)現(xiàn)地圖的顯示和交互功能。?
? 常用方法:?
- ? ?getMap():獲取百度地圖對(duì)象(BaiduMap)的實(shí)例。
- ? ?onResume():在Activity的生命周期方法中調(diào)用,用于恢復(fù)地圖控件的繪制和定位功能。
- ? ?onPause():在Activity的生命周期方法中調(diào)用,用于暫停地圖控件的繪制和定位功能。
- ? ?onDestroy():在Activity的生命周期方法中調(diào)用,用于銷毀地圖控件。
2. BaiduMap類:
????????BaiduMap 類是百度地圖SDK中的核心類,用于管理和操作地圖。它提供了一系列方法和接口,用于顯示地圖、控制地圖狀態(tài)、添加覆蓋物、定位等功能。?
常用方法:??
- ? ?setMapType():設(shè)置地圖顯示類型,如普通地圖、衛(wèi)星地圖等。
- ? ?setMapStatus():設(shè)置地圖的狀態(tài),包括中心點(diǎn)坐標(biāo)、縮放級(jí)別、傾斜角度和旋轉(zhuǎn)角度等。
- ? ?addOverlay():添加覆蓋物(Overlay),如標(biāo)記點(diǎn)(Marker)、折線(Polyline)和多邊形(Polygon)等。
- ? ?clear():清除地圖上的所有覆蓋物。
- ? ?setOnMapClickListener():設(shè)置地圖點(diǎn)擊事件監(jiān)聽器。
- ? ?setOnMarkerClickListener():設(shè)置標(biāo)記點(diǎn)點(diǎn)擊事件監(jiān)聽器。
3. GeoCoder類:
????????GeoCoder 類是百度地圖SDK提供的一個(gè)地理編碼和反地理編碼工具類,用于將地址信息與地理坐標(biāo)之間進(jìn)行轉(zhuǎn)換。通過 GeoCoder 類,開發(fā)者可以實(shí)現(xiàn)將地址解析為經(jīng)緯度坐標(biāo)(地理編碼),或者將經(jīng)緯度坐標(biāo)解析為地址信息(反地理編碼)。?
常用方法:??
- ? ?newInstance():創(chuàng)建 GeoCoder 實(shí)例。
- ? ?setOnGetGeoCodeResultListener():設(shè)置地理編碼查詢結(jié)果監(jiān)聽器。
- ? ?setOnGetReverseGeoCodeResultListener():設(shè)置反地理編碼查詢結(jié)果監(jiān)聽器。
- ? ?geocode():發(fā)起地理編碼查詢,將地址信息轉(zhuǎn)換為經(jīng)緯度坐標(biāo)。
- ? ?reverseGeoCode():發(fā)起反地理編碼查詢,將經(jīng)緯度坐標(biāo)轉(zhuǎn)換為地址信息。
4. LocationClient類:
?????????LocationClient 類是百度定位SDK提供的核心類,用于實(shí)現(xiàn)設(shè)備的定位功能。通過 LocationClient 類,開發(fā)者可以獲取設(shè)備的當(dāng)前位置信息,包括經(jīng)緯度坐標(biāo)、速度、方向等。
常用方法:??
- ? ?registerLocationListener():注冊(cè)定位監(jiān)聽器。
- ? ?start():開始定位。
- ? ?stop():停止定位。
5. RoutePlanSearch類:
????????RoutePlanSearch 類是百度地圖SDK提供的路線規(guī)劃搜索類,用于實(shí)現(xiàn)不同交通方式的路線規(guī)劃功能。通過 RoutePlanSearch 類,開發(fā)者可以根據(jù)起點(diǎn)和終點(diǎn)的坐標(biāo),進(jìn)行駕車、步行、公交等多種交通方式的路線規(guī)劃,并獲取詳細(xì)的路線信息。
常用方法:??
- ? ?setOnGetRoutePlanResultListener():設(shè)置路徑規(guī)劃結(jié)果監(jiān)聽器。
- ? ?drivingSearch():發(fā)起駕車路線規(guī)劃。
- ? ?walkingSearch():發(fā)起步行路線規(guī)劃。
- ? ?transitSearch():發(fā)起公交路線規(guī)劃。
6.LatLng 類:
????????LatLng 類是百度地圖SDK提供的一個(gè)表示經(jīng)緯度坐標(biāo)的類。它用于存儲(chǔ)地理位置的經(jīng)度和緯度信息,并提供了一些方法來獲取和設(shè)置經(jīng)緯度值。?
常用方法:??
latitude()
:獲取緯度值。longitude()
:獲取經(jīng)度值。equals(LatLng other)
:判斷當(dāng)前 LatLng 對(duì)象是否與另一個(gè) LatLng 對(duì)象相等。toString()
:返回 LatLng 對(duì)象的字符串表示。?
7.?PoiSearch 類:?
????????PoiSearch 類是百度地圖SDK提供的一個(gè)興趣點(diǎn)搜索類,用于實(shí)現(xiàn)地圖上的興趣點(diǎn)檢索功能。通過 PoiSearch 類,開發(fā)者可以根據(jù)關(guān)鍵詞、地理位置等條件進(jìn)行興趣點(diǎn)的搜索,并獲取相關(guān)的搜索結(jié)果。
常用方法:??
- ?
newInstance()
:創(chuàng)建 PoiSearch 實(shí)例。 searchInCity(PoiCitySearchOption option)
:在指定城市內(nèi)搜索興趣點(diǎn)。需要?jiǎng)?chuàng)建一個(gè) PoiCitySearchOption 對(duì)象,并設(shè)置要搜索的城市名稱、關(guān)鍵詞等參數(shù),然后調(diào)用該方法進(jìn)行搜索。searchNearby(PoiNearbySearchOption option)
:在指定位置附近搜索興趣點(diǎn)。需要?jiǎng)?chuàng)建一個(gè) PoiNearbySearchOption 對(duì)象,并設(shè)置中心點(diǎn)坐標(biāo)、搜索半徑、關(guān)鍵詞等參數(shù),然后調(diào)用該方法進(jìn)行搜索。searchInBound(PoiBoundSearchOption option)
:在指定矩形區(qū)域內(nèi)搜索興趣點(diǎn)。需要?jiǎng)?chuàng)建一個(gè) PoiBoundSearchOption 對(duì)象,并設(shè)置矩形區(qū)域的左下角和右上角坐標(biāo)、關(guān)鍵詞等參數(shù),然后調(diào)用該方法進(jìn)行搜索。setOnGetPoiSearchResultListener(OnGetPoiSearchResultListener listener)
:設(shè)置興趣點(diǎn)搜索結(jié)果的監(jiān)聽器。需要實(shí)現(xiàn) OnGetPoiSearchResultListener 接口,并將其注冊(cè)給 PoiSearch 對(duì)象,以接收搜索結(jié)果的回調(diào)。searchPoiDetail(PoiDetailSearchOption option)
:根據(jù)興趣點(diǎn)的 UID 獲取詳細(xì)信息。需要?jiǎng)?chuàng)建一個(gè) PoiDetailSearchOption 對(duì)象,并設(shè)置興趣點(diǎn)的 UID,然后調(diào)用該方法進(jìn)行詳情查詢。searchPoiIndoor(PoiIndoorOption option)
:在室內(nèi)地圖中搜索興趣點(diǎn)。需要?jiǎng)?chuàng)建一個(gè) PoiIndoorOption 對(duì)象,并設(shè)置室內(nèi)ID、關(guān)鍵詞等參數(shù),然后調(diào)用該方法進(jìn)行搜索。searchPoiPage(int pageNum)
:加載下一頁(yè)的搜索結(jié)果。需要指定要加載的頁(yè)碼,通過設(shè)置之前的搜索選項(xiàng)對(duì)象的pageNum
屬性來實(shí)現(xiàn)分頁(yè)加載。destroy()
:銷毀 PoiSearch 對(duì)象,釋放相關(guān)資源。
8.PoiResult 類:
????????PoiResult 類是百度地圖SDK中的一個(gè)類,用于表示興趣點(diǎn)搜索的結(jié)果集。它包含了符合搜索條件的一組興趣點(diǎn)數(shù)據(jù),并提供了相關(guān)的方法來獲取和操作這些數(shù)據(jù)。
getAllPoi()
:獲取搜索到的所有結(jié)果。error
:表示搜索結(jié)果的錯(cuò)誤碼。?
9.PoiInfo 類:
????????PoiInfo 類是百度地圖SDK中的一個(gè)類,用于表示興趣點(diǎn)的信息。它包含了興趣點(diǎn)的名稱、地址、經(jīng)緯度坐標(biāo)等詳細(xì)信息,并提供了相關(guān)的方法來獲取和操作這些數(shù)據(jù)。?
name
:POI 名稱。address
:POI 地址。
10.PoiOverlay 類:
????????PoiOverlay 類是百度地圖SDK中的一個(gè)類,用于在地圖上繪制興趣點(diǎn)標(biāo)注覆蓋物。它可以將 PoiResult 中的興趣點(diǎn)數(shù)據(jù)在地圖上展示,并提供了一些方法用于自定義標(biāo)注樣式和點(diǎn)擊事件處理。
setData()
:設(shè)置搜索到的 POI 數(shù)據(jù)。addToMap()
:將興趣點(diǎn)標(biāo)注添加到地圖上。zoomToSpan()
:縮放地圖以適應(yīng)所有興趣點(diǎn)。
二、使用例子
例1:獲取當(dāng)前位置:
?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.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; // 經(jīng)度TextView tv_Lon; // 緯度TextView tv_Add; // 地址GeoCoder mGeoCoder;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 初始化地圖應(yīng)用SDKInitializer.setAgreePrivacy(this.getApplicationContext(), true);LocationClient.setAgreePrivacy(true);// 初始化百度地圖SDK。這個(gè)方法必須在使用百度地圖相關(guān)功能之前調(diào)用,否則無法正常使用地圖功能。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 對(duì)象
// 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();}}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {switch (requestCode) {case 1:if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {Toast.makeText(this, "沒有定位權(quán)限!", Toast.LENGTH_SHORT).show();finish();} else {requestLocation();}}super.onRequestPermissionsResult(requestCode, permissions, grantResults);}private void requestLocation() {// 定位前初始化initLocation();// 發(fā)起定位mLocationClient.start();}private void initLocation() {try {mLocationClient = new LocationClient(getApplicationContext());mLocationClient.registerLocationListener(new MyLocationListener());// 定位客戶端操作LocationClientOption option = new LocationClientOption();// 設(shè)置掃描時(shí)間option.setScanSpan(1000);// 設(shè)置定位模式option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);option.setIsNeedAddress(true); // 設(shè)置需要地址信息// 保存定位參數(shù)mLocationClient.setLocOption(option);} catch (Exception e) {e.printStackTrace();}}// 內(nèi)部類,百度位置監(jiān)聽器private class MyLocationListener implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation bdLocation) {tv_Lat.setText(String.valueOf(bdLocation.getLatitude()));tv_Lon.setText(String.valueOf(bdLocation.getLongitude()));tv_Add.setText(bdLocation.getAddrStr());// GPS 定位或網(wǎng)格定位時(shí)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);// 以動(dòng)畫更新方式,實(shí)現(xiàn)對(duì)手勢(shì)引起的地圖狀態(tài)的更新mBaiduMap.animateMapStatus(update);// 創(chuàng)建自定義標(biāo)記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;}}}@Overrideprotected void onResume() {super.onResume();mMapView.onResume();}@Overrideprotected void onPause() {super.onPause();mMapView.onPause();}@Overrideprotected void onDestroy() {super.onDestroy();mMapView.onDestroy();// 釋放 PoiSearch 和 GeoCoder 對(duì)象
// mPoiSearch.destroy();
// mGeoCoder.destroy();}}
?activity_main:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><com.baidu.mapapi.map.MapViewandroid:id="@+id/bmapView"android:layout_width="fill_parent"android:layout_height="fill_parent"android:clickable="true"/><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="vertical"android:background="#E0474141"><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_marginLeft="12dp"android:layout_marginTop="20dp"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="緯度:"android:textColor="#ffffff"android:textSize="15dp"/><TextViewandroid:id="@+id/tv_Lat"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text=""android:textColor="#ffffff"android:textSize="15sp"/></LinearLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_marginLeft="12dp"android:layout_marginTop="10dp"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="經(jīng)度:"android:textColor="#ffffff"android:textSize="15dp"/><TextViewandroid:id="@+id/tv_Lon"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text=""android:textColor="#ffffff"android:textSize="15sp"/></LinearLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_marginLeft="12dp"android:layout_marginTop="10dp"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="地址:"android:textColor="#ffffff"android:textSize="15dp"/><TextViewandroid:id="@+id/tv_Add"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text=""android:textColor="#ffffff"android:textSize="15sp"/></LinearLayout></LinearLayout>
</FrameLayout>
?AndroidManifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.location"><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/><uses-permission android:name="android.permission.INTERNET"/><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.UI"><meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="你的Key" /><activityandroid:name=".MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"></service></application></manifest>
?運(yùn)行結(jié)果:
?未完待續(xù)。。。