日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

安卓地图开发

發(fā)布時間:2023/12/9 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 安卓地图开发 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

安卓地圖

獲取密鑰

登錄后將進入API控制臺,

在app目錄下的build.gradle文件中找到applicationId,并確保其值與AndroidManifest.xml中定義的package相同。

獲取SHA1
進入Terminal工具

找到.android文件夾下的debug.keystroe

輸入默認密碼android,查看SHA1

百度地圖開發(fā)包

開發(fā)文檔->Android 地圖SDK->產(chǎn)品下載->自定義下載
在app目錄下的build.gradle文件中android塊中配置sourceSets標簽

選擇模塊視圖為Project,解壓文件夾至項目libs
右鍵BaiduLBS_Android.jar選擇Add As Library

顯示地圖

在application中加入如下代碼配置開發(fā)密鑰(AK):

在這里插入代碼片<application> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="開發(fā)者 key" /> </application>

appliancation外部添程序

<!-- 訪問網(wǎng)絡(luò),進行地圖相關(guān)業(yè)務(wù)數(shù)據(jù)請求,包括地圖數(shù)據(jù),路線規(guī)劃,POI檢索等 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 獲取網(wǎng)絡(luò)狀態(tài),根據(jù)網(wǎng)絡(luò)狀態(tài)切換進行數(shù)據(jù)請求網(wǎng)絡(luò)轉(zhuǎn)換 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!-- 讀取外置存儲。如果開發(fā)者使用了so動態(tài)加載功能并且把so文件放在了外置存儲區(qū)域,則需要申請該權(quán)限,否則不需要 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 寫外置存儲。如果開發(fā)者使用了離線地圖,并且數(shù)據(jù)寫在外置存儲區(qū)域,則需要申請該權(quán)限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

MapView是View的一個子類,用于在Android View中放置地圖。MapView的使用方法與Android提供的其他View一樣。

<com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" />

其onCreate方法中完成SDK的初始化。

public class DemoApplication extends Application {@Overridepublic void onCreate() {super.onCreate();//在使用SDK各組件之前初始化context信息,傳入ApplicationContext SDKInitializer.initialize(this);//自4.3.0起,百度地圖SDK所有接口均支持百度坐標和國測局坐標,用此方法設(shè)置您使用的坐標類型.//包括BD09LL和GCJ02兩種坐標,默認是BD09LL坐標。SDKInitializer.setCoordType(CoordType.BD09LL);} }

創(chuàng)建地圖Activity,管理MapView生命周期

public class MainActivity extends Activity { private MapView mMapView = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //獲取地圖控件引用 mMapView = (MapView) findViewById(R.id.bmapView); } @Override protected void onResume() { super.onResume(); //在activity執(zhí)行onResume時執(zhí)行mMapView. onResume (),實現(xiàn)地圖生命周期管理 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity執(zhí)行onPause時執(zhí)行mMapView. onPause (),實現(xiàn)地圖生命周期管理 mMapView.onPause(); } @Override protected void onDestroy() { super.onDestroy(); //在activity執(zhí)行onDestroy時執(zhí)行mMapView.onDestroy(),實現(xiàn)地圖生命周期管理 mMapView.onDestroy(); } }

@定位地圖

AndroidManifest.xml文件

<!-- 這個權(quán)限用于進行網(wǎng)絡(luò)定位 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 這個權(quán)限用于訪問GPS定位 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

聲明定位的service組件

<service android:name="com.baidu.location.f"android:enabled="true"android:process=":remote"/>

xml

<FrameLayout xmlns: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"android:orientation="vertical"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:background="#e0000000"android:orientation="vertical"><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"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="15dp" /></LinearLayout><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"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="15dp" /></LinearLayout><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="12dp"android:layout_marginTop="10dp"android:layout_marginBottom="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="15dp" /></LinearLayout></LinearLayout> </FrameLayout>

地圖數(shù)據(jù)

繼承抽象類BDAbstractListener并重寫其onReceieveLocation方法來獲取定位數(shù)據(jù)

public class MyLocationListener extends BDAbstractLocationListener {private MapView mMapView;private BaiduMap mBaiduMap;private LocationClient mLocationClient;private boolean isFirstLocate = true;private LocationClientOption option;TextView tv_Lat; //緯度TextView tv_Lon; //經(jīng)度TextView tv_Add; //地址//構(gòu)造方法用于傳遞地圖控件public MyLocationListener(MapView mMapView, BaiduMap mBaiduMap, LocationClient mLocationClient,TextView tv_Lat, TextView tv_Lon, TextView tv_Add,LocationClientOption option) {this.mMapView = mMapView;this.mBaiduMap = mBaiduMap;this.mLocationClient=mLocationClient;this.tv_Lat=tv_Lat;this.tv_Lon=tv_Lon;this.tv_Add=tv_Add;this.option=option;}@Overridepublic void onReceiveLocation(BDLocation location) {//mapView 銷毀后不在處理新接收的位置if (location == null || mMapView == null){return;}tv_Lat.setText(location.getLatitude()+"");tv_Lon.setText(location.getLongitude()+"");tv_Add.setText(location.getAddrStr());if(location.getLocType()==BDLocation.TypeGpsLocation || location.getLocType()==BDLocation.TypeNetWorkLocation){navigateTo(location);}MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius())// 此處設(shè)置開發(fā)者獲取到的方向信息,順時針0-360.direction(location.getDirection()).latitude(location.getLatitude()).longitude(location.getLongitude()).build();mBaiduMap.setMyLocationData(locData);}private void navigateTo(BDLocation location) {if(isFirstLocate){LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);mBaiduMap.animateMapStatus(update);isFirstLocate = false;}} }```javamLocationClient = new LocationClient(this);//通過LocationClientOption設(shè)置LocationClient相關(guān)參數(shù)LocationClientOption option = new LocationClientOption();//option.setOpenGps(true); // 打開gpsoption.setCoorType("bd09ll"); // 設(shè)置坐標類型option.setScanSpan(1000);//設(shè)置定位模式,三選一option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//設(shè)置需要地址信息option.setIsNeedAddress(true);//設(shè)置locationClientOptionmLocationClient.setLocOption(option);//注冊LocationListener監(jiān)聽器MyLocationListener myLocationListener = new MyLocationListener(mMapView,mBaiduMap,mLocationClient,tv_Lat,tv_Lon,tv_Add,option);mLocationClient.registerLocationListener(myLocationListener);//開啟地圖定位圖層mLocationClient.start();

截圖


感悟

MapController : 主要控制地圖移動,伸縮,以某個GPS坐標為中心,控制MapView中的view組件,管理Overlay,提供View的基本功能。使用多種地圖模式(地圖模式(某些城市可實時對交通狀況進行更新),衛(wèi)星模式,街景模式)來查看Google Map。常用方法:animateTo(GeoPoint point) setCenter(GeoPoint point) setZoom(int zoomLevel) 等。Mapview : 是用來顯示地圖的view, 它派生自android.view.ViewGroup。當MapView獲得焦點,可以控制地圖的移動和縮放。地圖可以以不同的形式來顯示出來,如街景模式,衛(wèi)星模式等,通過setSatellite(boolean) setTraffic(boolean), setStreetView(boolean) 方法。Overlay : 是覆蓋到MapView的最上層,可以擴展其ondraw接口,自定義在MapView中顯示一些自己的東西。MapView通過MapView.getOverlays()對Overlay進行管理。Projection :MapView中GPS坐標與設(shè)備坐標的轉(zhuǎn)換(GeoPoint和Point)。定位系統(tǒng)包中的主要類:LocationManager:本類提供訪問定位服務(wù)的功能,也提供獲取最佳定位提供者的功能。另外,臨近警報功能也可以借助該類來實現(xiàn)。LocationProvider:該類是定位提供者的抽象類。定位提供者具備周期性報告設(shè)備地理位置的功能。LocationListener:提供定位信息發(fā)生改變時的回調(diào)功能。必須事先在定位管理器中注冊監(jiān)聽器對象。Criteria:該類使得應(yīng)用能夠通過在LocationProvider中設(shè)置的屬性來選擇合適的定位提供者。Geocoder:用于處理地理編碼和反向地理編碼的類。地理編碼是指將地址或其他描述轉(zhuǎn)變?yōu)榻?jīng)度和緯度,反向地理編碼則是將經(jīng)度和緯度轉(zhuǎn)變?yōu)榈刂坊蛎枋稣Z言,其中包含了兩個構(gòu)造函數(shù),需要傳入經(jīng)度和緯度的坐標。getFromLocation方法可以得到一組關(guān)于地址的數(shù)組。

就是在編寫地圖導(dǎo)航模塊的時候,在初始化驗證驗證key以及初始化百度地圖導(dǎo)航的引擎的時候,會一直
出現(xiàn)“初始化百度導(dǎo)航引擎失敗”。
原因:第一種是相應(yīng)的jar包沒有導(dǎo)入完全,第二種就是在assets文件夾內(nèi)的資源文件沒有
解決辦法:1、補全相應(yīng)的jar包;2、把官方demo中的assets文件夾中的資源文件全部拷貝到項目工程中。

總結(jié)

以上是生活随笔為你收集整理的安卓地图开发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。