當前位置:首頁 » 安卓系統 » android百度地圖開發定位

android百度地圖開發定位

發布時間: 2022-05-22 22:26:56

Ⅰ Android利用百度地圖SDK定位問題,如何更加精準

打開GPS,而且要在戶外在最准確。

網路地圖Android定位SDK提供GPS,基站,Wi-Fi等多種定位方式,適用於室、內外多種定位場景,具有出色的定位性能:定位精度高、覆蓋率廣、網路定位請求流量小、定位速度快。

Ⅱ 在android中怎麼寫百度api根據指定位置定位

網路地圖SDK為開發者們提供了如下類型的地圖覆蓋物:


我的位置圖層(MyLocationOverlay):用於顯示用戶當前位置的圖層(支持自定義位置圖標);


Poi搜索結果圖層(PoiOverlay):用於顯示興趣點搜索結果的圖層;


路線圖層(RouteOverlay):公交、步行和駕車線路圖層,將公交、步行和駕車出行方案的路線及關鍵點顯示在地圖上(起、終點圖標用戶可自定義);


公交換乘圖層(TransitOverlay):公交換乘線路圖層,將某一特定地區的公交出行方案的路線及換乘位置顯示在地圖上(起、終點圖標用戶可自定義);


自定義圖層(ItemizedOverlay):可將一個或多個興趣點繪制到地圖上,且支持自定義圖標(支持動態更新Item位置、圖標);


彈出窗圖層(PopupOverlay):在地圖上顯示一個彈出窗口;


幾何圖形繪制圖層(GraphicsOverlay):用於繪制點、折線段、弧線、圓、矩形、多邊形等幾何圖形的圖層;


文字繪制圖層(TextOverlay):用於繪制文字的圖層。


圖片圖層(GroundOverlay):用於展示用戶傳入圖片的圖層。


全景圖圖層(PanoramaOverlay):在全景圖內標繪興趣點,支持自定義圖標樣式。


註:除彈出窗圖層外,其他各個圖層均已實現多實例。全景圖圖層是針對全景圖所使用的特殊圖層。


MapView使用一個List管理覆蓋物,通過向MapView.getOverlays() add或remove上述類或其基類的實例即可向地圖添加或刪除覆蓋物。在更新地圖覆蓋物後,需調用MapView.refresh() 使更新生效。




定位原理


使用網路Android定位SDK必須注冊GPS和網路使用許可權。定位SDK採用GPS、基站、Wi-Fi信號進行定位。當應用程序向定位SDK發起定位請求時,定位SDK會根據應用的定位因素(GPS、基站、Wi-Fi信號)的實際情況(如是否開啟GPS、是否連接網路、是否有信號等)來生成相應定位依據進行定位。

用戶可以設置滿足自身需求的定位依據:

若用戶設置GPS優先,則優先使用GPS進行定位,如果GPS定位未打開或者沒有可用位置信息,且網路連接正常,定位SDK則會返回網路定位(即Wi-Fi與基站)的最優結果。為了使獲得的網路定位結果更加精確,請打開手機的Wi-Fi開關。


下面我們將利用 MyLocationOverlay和 PopupOverlay 這兩個類

一 . 導入庫文件


在使用網路定位SDKv4.0之前,我們要下載最新的庫文件,下載地址:點擊下載相關庫文件,將liblocSDK4.so文件拷貝到libs/armeabi目錄下。將locSDK4.0.jar文件拷貝到工程的libs目錄下

LocationClient 定位SDK的核心類,LocationClient類必須在主線程中聲明。需要Context類型的參數。Context需要時全進程有效的context,推薦用getApplicationConext獲取全進程有效的context,我們調用registerLocationListener(BDLocationListener)方法來注冊定位監聽介面,BDLocationListener裡面有兩個方法,onReceiveLocation()(接收非同步返回的定位結果),onReceivePoi()(接收非同步返回的POI查詢結果,POI是「Point of Interest」的縮寫,可以翻譯成「信息點」,每個POI包含四方面信息,名稱、類別、經度、緯度、附近的酒店、飯店,商鋪等信息。我們可以叫它為「導航地圖信息」,導航地圖數據是整個導航產業的基石),我們這里只需要重寫onReceiveLocation就行了BDLocation 封裝了定位SDK的定位結果,在BDLocationListener的onReceive方法中獲取。通過該類用戶可以獲取error code,位置的坐標,精度半徑,地址等信息,對於其getLocType ()方法獲取的error code一些情況

61 : GPS定位結果62 : 掃描整合定位依據失敗。此時定位結果無效。63 : 網路異常,沒有成功向伺服器發起請求。此時定位結果無效。65 : 定位緩存的結果。66 : 離線定位結果。通過requestOfflineLocaiton調用時對應的返回結果67 : 離線定位失敗。通過requestOfflineLocaiton調用時對應的返回結果68 : 網路連接失敗時,查找本地離線定位時對應的返回結果161: 表示網路定位結果162~167: 服務端定位失敗

LocationClientOption 用來設置定位SDK的定位方式,比如設置打開GPS,設置是否需要地址信息,設置發起定位請求的間隔時間等等,參數設置完後調用LocationClient 的setLocOption方法LocationOverlay MyLocationOverlay的子類,重寫裡面的dispatchTap()方法,顯示彈出窗口圖層PopupOverlay,調用mMapView.getOverlays().add(myLocationOverlay)就將我的位置圖層添加到地圖裡面PopupOverlay 彈出圖層,這個類還是比較簡單,裡面只有三個方法,hidePop() (隱藏彈出圖層)showPopup(Bitmap pop, GeoPoint point, int yOffset) (顯示彈出圖層)和showPopup顯示多張圖片的重載方法,由於showPopup方法只接受Bitmap對象,所以我們必須將我們的彈出圖層View對象轉換成Bitmap對象,我們調用getBitmapFromView方法就實現這一轉換BDLocationListener介面的onReceiveLocation(BDLocation location) 方法我還要重點講解下,我們會發現onReceiveLocation方法會反復執行,他執行的間隔跟LocationClientOption類的setScanSpan()方法設定的值有關,我們設定的是5000毫秒,則onReceiveLocation方法每隔5秒執行一次,注意,當我們設定的值大於1000(ms),定位SDK內部使用定時定位模式。調用requestLocation( )後,每隔設定的時間,定位SDK就會進行一次定位。如果定位SDK根據定位依據發現位置沒有發生變化,就不會發起網路請求,返回上一次定位的結果;如果發現位置改變,就進行網路請求進行定位,得到新的定位結果。如果你只需要定位一次的話,這個設置小於1000,或者不用設置就可以了,定時定位時,調用一次requestLocation,會定時監聽到定位結果 四 . 在運行程序之前,我們還必須在AndroidManifest.xml進行相關配置和許可權的聲明


還有很重要的一點就是在AndroidManifest.xml中添加下面的內容



android:name=com..location.f

android:enabled=true

android:process=:remote >


android:name=com..lbsapi.API_KEY

android:value=6KOX4mXHeBRzgriV6OP1T2Hw

/>


其中的meta-data問題:網上這樣說,大家記住就得了。。。。


因為單獨的定位sdk需要一個key值,而定位sdk的值又不像mapManager中可以直接賦值

所以就需要在注冊表單中注冊

Ⅲ android開發 百度地圖 可以不使用GPS定位,只是用其它的定位方式嗎

網路地圖的定位是混合定位,wifi+基站+gps,所以你開發的定位程序,即使不打開gps也可以通過其他兩種方式獲取位置,但是通常較慢,在獲得動態路徑時不理想

Ⅳ android 版百度地圖如何通過定位功能獲得當前的位置所在的城市

網路地圖是通過移動通信基站定位來確定當前位置所在的城市。其原理就是通過測算周圍基站與手機的距離來交會估算手機的空間位置。
手機定位是指通過特定的定位技術來獲取移動手機或終端用戶的位置信息(經緯度坐標),在電子地圖上標出被定位對象的位置的技術或服務。定位技術有兩種,一種是基於GPS的定位,一種是基於移動運營網的基站的定位。基於GPS的定位方式是利用手機上的GPS定位模塊將自己的位置信號發送到定位後台來實現手機定位的。基站定位則是利用基站對手機的距離的測算距離來確定手機位置的。後者不需要手機具有GPS定位能力,但是精度很大程度依賴於基站的分布及覆蓋范圍的大小,有時誤差會超過一公里。前者定位精度較高。此外還有利用Wifi在小范圍內定位的方式。

Ⅳ android用百度地圖定位我的位置 並搜索附近xx(例如酒店)建築 搜索到的xx建築名稱

網路地圖SDK為開發者們提供了如下類型的地圖覆蓋物:

我的位置圖層(MyLocationOverlay):用於顯示用戶當前位置的圖層(支持自定義位置圖標);

Poi搜索結果圖層(PoiOverlay):用於顯示興趣點搜索結果的圖層;

路線圖層(RouteOverlay):公交、步行和駕車線路圖層,將公交、步行和駕車出行方案的路線及關鍵點顯示在地圖上(起、終點圖標用戶可自定義);

公交換乘圖層(TransitOverlay):公交換乘線路圖層,將某一特定地區的公交出行方案的路線及換乘位置顯示在地圖上(起、終點圖標用戶可自定義);

自定義圖層(ItemizedOverlay):可將一個或多個興趣點繪制到地圖上,且支持自定義圖標(支持動態更新Item位置、圖標);

彈出窗圖層(PopupOverlay):在地圖上顯示一個彈出窗口;

幾何圖形繪制圖層(GraphicsOverlay):用於繪制點、折線段、弧線、圓、矩形、多邊形等幾何圖形的圖層;

文字繪制圖層(TextOverlay):用於繪制文字的圖層。

圖片圖層(GroundOverlay):用於展示用戶傳入圖片的圖層。

全景圖圖層(PanoramaOverlay):在全景圖內標繪興趣點,支持自定義圖標樣式。

註:除彈出窗圖層外,其他各個圖層均已實現多實例。全景圖圖層是針對全景圖所使用的特殊圖層。

MapView使用一個List管理覆蓋物,通過向MapView.getOverlays() add或remove上述類或其基類的實例即可向地圖添加或刪除覆蓋物。在更新地圖覆蓋物後,需調用MapView.refresh() 使更新生效。

Ⅵ 怎麼在android百度地圖通過經緯度來定位並且顯示出地圖位置

可以參考如下內容:

使用Android自帶的LocationManager和Location獲取位置的時候,經常會有獲取的location為null的情況,並且操作起來也不是很方便,在這個Demo里我使用了網路地圖API中的定位SDK,可以一次性獲取當前位置經緯度以及詳細地址信息,還可以獲取周邊POI信息,同時可以設定位置通知點,當到達某一位置時,發出通知信息等方式來告知用戶。jar包下載以及官方文檔請參照:網路定位SDK,前提是需要注冊網路開發者賬號。
下面來看看定位的基本原理,目前,定位SDK可以通過GPS、基站、Wifi信號進行定位。基本定位流程如下圖所示,當應用程序向定位SDK發起定位請求時,定位SDK會根據當前的GPS、基站、Wifi信息生成相對應的定位依據。然後定位SDK會根據定位依據來進行定位。如果需要,定位SDK會向定位伺服器發送網路請求。定位伺服器會根據請求的定位依據推算出對應的坐標位置,然後根據用戶的定製信息,生成定位結果返回給定位SDK。

Ⅶ android 基於百度地圖api開發的APP定位以及獲取詳細地址為什麼獲取不到村鎮位置,只能到縣

只有獲取省市區,及詳細地址,注意,這個詳細地址包含了省市區及村鎮,具體查看網路地圖api,有示例demo,可以直接拿去用的代碼。

Ⅷ Android開發中百度地圖的定位為什麼總是北京,不是自己的位置

給,對照一下
可能的問題:1.用虛擬機,虛擬機定位就是在北京。
2.手機(或虛擬機)是否開啟了GPS功能

------------------------------
public class MainActivity extends AppCompatActivity {

MapView mMapView = null;
private BaiMap mBaiDuMap;
public LocationClient mLocationClient;
// public BDLocationListener myListener = new MyLocationListener();
public MyLocationListener myListener = new MyLocationListener();
private BitmapDescriptor mCurrentMarker;
private MyLocationConfiguration.LocationMode mCurrentMode;

// 經緯度
private TextView tvJingDu;
// 緯度
private TextView tvWeiDu;
// 高度
private TextView tvGaoDu;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);

// 經緯度TextView 初始化
tvJingDu = (TextView) findViewById(R.id.tv_jing_);
tvWeiDu = (TextView) findViewById(R.id.tv_wei_);
tvGaoDu = (TextView) findViewById(R.id.tv_gao_);

//===================================
// 普通模式
mCurrentMode = MyLocationConfiguration.LocationMode.COMPASS;

// TODO
// mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.dingwei);
mCurrentMarker = null;

// 找到地圖控制項
mMapView = (MapView) findViewById(R.id.bmapView);
mBaiDuMap = mMapView.getMap();// 獲取地圖

mBaiDuMap.setMapType(BaiMap.MAP_TYPE_NORMAL);// 設置地圖模式為普通模式

// 開啟定點陣圖層
mBaiDuMap.setMyLocationEnabled(true);
mLocationClient = new LocationClient(this); // 定位用到一個類
mLocationClient.registerLocationListener(myListener);// 注冊監聽

// TODO
mBaiDuMap.setMyLocationConfigeration(new MyLocationConfiguration(
mCurrentMode, true, mCurrentMarker, R.color.myBlue, Color.YELLOW
));

// LocationClientOption類用來設置SDK的位置方式
LocationClientOption option = new LocationClientOption();//以下是給定位設置參數
option.setOpenGps(true); // 打開gps
option.setCoorType("bd09ll"); // 設置坐標類型
option.setScanSpan(2000);
mLocationClient.setLocOption(option);
mLocationClient.start();

}

boolean isFirstLoc = true; // 是否首次定位

// 3.網路位置監聽
public class MyLocationListener implements BDLocationListener {

@Override
public void onReceiveLocation(BDLocation location) {
Log.i("監聽被執行了", "監聽被執行了");

if (location == null || mMapView == null) {
return;
}

// // 定位結果
// StringBuffer sb = new StringBuffer(256);
// StringBuffer sb1 = new StringBuffer(256);
// StringBuffer sb2 = new StringBuffer(256);
// // 經度
// String jd = sb.append(location.getLongitude()).toString();
// tvJingDu.setText("" + jd);
// Log.i("經度", "" + jd);
// // 緯度
// String wd = sb1.append(location.getLatitude()).toString();
// tvWeiDu.setText("" + sb1);
// Log.i("緯度", "" + wd);
//
// String gao = sb.append(location.getAltitude()).toString();
// tvGaoDu.setText("" + gao);
// 經度
double d1 = location.getLongitude();
String s1 = "" + d1;
tvWeiDu.setText(s1);
Log.i("經度", "" + s1);
// 緯度
double d2 = location.getLatitude();
Log.i("TGA", "d2" + d2);
String s2 = "" + d2;
tvJingDu.setText(s2);
Log.i("緯度", "" + s2);

MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
// 此處設置開發者獲取到的方向信息,順時針0-360
.direction(0).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
mBaiDuMap.setMyLocationData(locData);

if (isFirstLoc) {
isFirstLoc = false;
LatLng ll = new LatLng(location.getLatitude(),
location.getLongitude());
MapStatus.Builder builder = new MapStatus.Builder();
// 縮放的等級 12.0f
builder.target(ll).zoom(18.0f);
mBaiDuMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
}
Log.i("MyLocationListener被執行了!", "onReceiveLocation");

}

@Override
public void onConnectHotSpotMessage(String s, int i) {

}
}

// 結束方法

@Override
protected void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
}

@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
}

@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
}
}

Ⅸ Android開發百度地圖的定位問題

其實網路地圖知道你的准確位置。由於我國相關法律對民用級別的定位有規定。所以故意把你的位置偏移了一點。這個沒辦法解決。

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:645
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:936
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:632
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:821
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:731
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1066
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:299
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:160
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:852
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:763