做網(wǎng)站老師全自動引流推廣軟件下載
一、百度地圖介紹
????????百度地圖SDK是一套供開發(fā)者使用的軟件開發(fā)工具包(SDK),用于在Android應(yīng)用程序中集成和使用百度地圖功能。通過使用百度地圖SDK,開發(fā)者可以實現(xiàn)在自己的應(yīng)用中顯示地圖、獲取定位信息、進行搜索、導航等功能。
????????百度地圖SDK提供了許多常用的類和方法,用于實現(xiàn)各種地圖相關(guān)功能。以下是一些常用的類及其方法:
1. MapView類:
????????MapView 類是百度地圖SDK提供的一個控件類,用于在應(yīng)用程序的界面上顯示地圖。它是一個自定義的 View,可以與 BaiduMap 類關(guān)聯(lián),實現(xiàn)地圖的顯示和交互功能。?
? 常用方法:?
- ? ?getMap():獲取百度地圖對象(BaiduMap)的實例。
- ? ?onResume():在Activity的生命周期方法中調(diào)用,用于恢復地圖控件的繪制和定位功能。
- ? ?onPause():在Activity的生命周期方法中調(diào)用,用于暫停地圖控件的繪制和定位功能。
- ? ?onDestroy():在Activity的生命周期方法中調(diào)用,用于銷毀地圖控件。
2. BaiduMap類:
????????BaiduMap 類是百度地圖SDK中的核心類,用于管理和操作地圖。它提供了一系列方法和接口,用于顯示地圖、控制地圖狀態(tài)、添加覆蓋物、定位等功能。?
常用方法:??
- ? ?setMapType():設(shè)置地圖顯示類型,如普通地圖、衛(wèi)星地圖等。
- ? ?setMapStatus():設(shè)置地圖的狀態(tài),包括中心點坐標、縮放級別、傾斜角度和旋轉(zhuǎn)角度等。
- ? ?addOverlay():添加覆蓋物(Overlay),如標記點(Marker)、折線(Polyline)和多邊形(Polygon)等。
- ? ?clear():清除地圖上的所有覆蓋物。
- ? ?setOnMapClickListener():設(shè)置地圖點擊事件監(jiān)聽器。
- ? ?setOnMarkerClickListener():設(shè)置標記點點擊事件監(jiān)聽器。
3. GeoCoder類:
????????GeoCoder 類是百度地圖SDK提供的一個地理編碼和反地理編碼工具類,用于將地址信息與地理坐標之間進行轉(zhuǎn)換。通過 GeoCoder 類,開發(fā)者可以實現(xiàn)將地址解析為經(jīng)緯度坐標(地理編碼),或者將經(jīng)緯度坐標解析為地址信息(反地理編碼)。?
常用方法:??
- ? ?newInstance():創(chuàng)建 GeoCoder 實例。
- ? ?setOnGetGeoCodeResultListener():設(shè)置地理編碼查詢結(jié)果監(jiān)聽器。
- ? ?setOnGetReverseGeoCodeResultListener():設(shè)置反地理編碼查詢結(jié)果監(jiān)聽器。
- ? ?geocode():發(fā)起地理編碼查詢,將地址信息轉(zhuǎn)換為經(jīng)緯度坐標。
- ? ?reverseGeoCode():發(fā)起反地理編碼查詢,將經(jīng)緯度坐標轉(zhuǎn)換為地址信息。
4. LocationClient類:
?????????LocationClient 類是百度定位SDK提供的核心類,用于實現(xiàn)設(shè)備的定位功能。通過 LocationClient 類,開發(fā)者可以獲取設(shè)備的當前位置信息,包括經(jīng)緯度坐標、速度、方向等。
常用方法:??
- ? ?registerLocationListener():注冊定位監(jiān)聽器。
- ? ?start():開始定位。
- ? ?stop():停止定位。
5. RoutePlanSearch類:
????????RoutePlanSearch 類是百度地圖SDK提供的路線規(guī)劃搜索類,用于實現(xiàn)不同交通方式的路線規(guī)劃功能。通過 RoutePlanSearch 類,開發(fā)者可以根據(jù)起點和終點的坐標,進行駕車、步行、公交等多種交通方式的路線規(guī)劃,并獲取詳細的路線信息。
常用方法:??
- ? ?setOnGetRoutePlanResultListener():設(shè)置路徑規(guī)劃結(jié)果監(jiān)聽器。
- ? ?drivingSearch():發(fā)起駕車路線規(guī)劃。
- ? ?walkingSearch():發(fā)起步行路線規(guī)劃。
- ? ?transitSearch():發(fā)起公交路線規(guī)劃。
6.LatLng 類:
????????LatLng 類是百度地圖SDK提供的一個表示經(jīng)緯度坐標的類。它用于存儲地理位置的經(jīng)度和緯度信息,并提供了一些方法來獲取和設(shè)置經(jīng)緯度值。?
常用方法:??
latitude()
:獲取緯度值。longitude()
:獲取經(jīng)度值。equals(LatLng other)
:判斷當前 LatLng 對象是否與另一個 LatLng 對象相等。toString()
:返回 LatLng 對象的字符串表示。?
7.?PoiSearch 類:?
????????PoiSearch 類是百度地圖SDK提供的一個興趣點搜索類,用于實現(xiàn)地圖上的興趣點檢索功能。通過 PoiSearch 類,開發(fā)者可以根據(jù)關(guān)鍵詞、地理位置等條件進行興趣點的搜索,并獲取相關(guān)的搜索結(jié)果。
常用方法:??
- ?
newInstance()
:創(chuàng)建 PoiSearch 實例。 searchInCity(PoiCitySearchOption option)
:在指定城市內(nèi)搜索興趣點。需要創(chuàng)建一個 PoiCitySearchOption 對象,并設(shè)置要搜索的城市名稱、關(guān)鍵詞等參數(shù),然后調(diào)用該方法進行搜索。searchNearby(PoiNearbySearchOption option)
:在指定位置附近搜索興趣點。需要創(chuàng)建一個 PoiNearbySearchOption 對象,并設(shè)置中心點坐標、搜索半徑、關(guān)鍵詞等參數(shù),然后調(diào)用該方法進行搜索。searchInBound(PoiBoundSearchOption option)
:在指定矩形區(qū)域內(nèi)搜索興趣點。需要創(chuàng)建一個 PoiBoundSearchOption 對象,并設(shè)置矩形區(qū)域的左下角和右上角坐標、關(guān)鍵詞等參數(shù),然后調(diào)用該方法進行搜索。setOnGetPoiSearchResultListener(OnGetPoiSearchResultListener listener)
:設(shè)置興趣點搜索結(jié)果的監(jiān)聽器。需要實現(xiàn) OnGetPoiSearchResultListener 接口,并將其注冊給 PoiSearch 對象,以接收搜索結(jié)果的回調(diào)。searchPoiDetail(PoiDetailSearchOption option)
:根據(jù)興趣點的 UID 獲取詳細信息。需要創(chuàng)建一個 PoiDetailSearchOption 對象,并設(shè)置興趣點的 UID,然后調(diào)用該方法進行詳情查詢。searchPoiIndoor(PoiIndoorOption option)
:在室內(nèi)地圖中搜索興趣點。需要創(chuàng)建一個 PoiIndoorOption 對象,并設(shè)置室內(nèi)ID、關(guān)鍵詞等參數(shù),然后調(diào)用該方法進行搜索。searchPoiPage(int pageNum)
:加載下一頁的搜索結(jié)果。需要指定要加載的頁碼,通過設(shè)置之前的搜索選項對象的pageNum
屬性來實現(xiàn)分頁加載。destroy()
:銷毀 PoiSearch 對象,釋放相關(guān)資源。
8.PoiResult 類:
????????PoiResult 類是百度地圖SDK中的一個類,用于表示興趣點搜索的結(jié)果集。它包含了符合搜索條件的一組興趣點數(shù)據(jù),并提供了相關(guān)的方法來獲取和操作這些數(shù)據(jù)。
getAllPoi()
:獲取搜索到的所有結(jié)果。error
:表示搜索結(jié)果的錯誤碼。?
9.PoiInfo 類:
????????PoiInfo 類是百度地圖SDK中的一個類,用于表示興趣點的信息。它包含了興趣點的名稱、地址、經(jīng)緯度坐標等詳細信息,并提供了相關(guān)的方法來獲取和操作這些數(shù)據(jù)。?
name
:POI 名稱。address
:POI 地址。
10.PoiOverlay 類:
????????PoiOverlay 類是百度地圖SDK中的一個類,用于在地圖上繪制興趣點標注覆蓋物。它可以將 PoiResult 中的興趣點數(shù)據(jù)在地圖上展示,并提供了一些方法用于自定義標注樣式和點擊事件處理。
setData()
:設(shè)置搜索到的 POI 數(shù)據(jù)。addToMap()
:將興趣點標注添加到地圖上。zoomToSpan()
:縮放地圖以適應(yīng)所有興趣點。
二、使用例子
例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.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。這個方法必須在使用百度地圖相關(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 對象
// 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è)置掃描時間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)格定位時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);// 以動畫更新方式,實現(xiàn)對手勢引起的地圖狀態(tài)的更新mBaiduMap.animateMapStatus(update);// 創(chuàng)建自定義標記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 對象
// 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>
?運行結(jié)果:
?未完待續(xù)。。。