1. 程式人生 > >Android定位&地圖&導航——基於百度地圖,實現自定義圖示繪製並點選時彈出泡泡

Android定位&地圖&導航——基於百度地圖,實現自定義圖示繪製並點選時彈出泡泡

public class MainActivity extends Activity {
    private  EditText txtAddr;
    // 定位相關
    LocationClient mLocClient;
    LocationData locData = null;
    public MyLocationListenner myListener = new MyLocationListenner();
    public MyApplication app;
    //定點陣圖層
    locationOverlay myLocationOverlay = null
; //彈出泡泡圖層 private PopupOverlay pop = null;//彈出泡泡圖層,瀏覽節點時使用 private TextView popupText = null;//泡泡view private View viewCache = null; //地圖相關,使用繼承MapView的MyLocationMapView目的是重寫touch事件實現泡泡處理 //如果不處理touch事件,則無需繼承,直接使用MapView即可 public MyLocationMapView mMapView = null; // 地圖View
private MapController mMapController = null; private MKSearch mMKSearch = null;//用於資訊檢索服務 //UI相關 OnCheckedChangeListener radioButtonListener = null; TextView requestLocButton ,btSerach; boolean isRequest = false;//是否手動觸發請求定位 boolean isFirstLoc = true;//是否首次定位 @Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /** * 使用地圖sdk前需先初始化BMapManager. * BMapManager是全域性的,可為多個MapView共用,它需要地圖模組建立前建立, * 並在地圖地圖模組銷燬後銷燬,只要還有地圖模組在使用,BMapManager就不應該銷燬 */ app = (MyApplication)this.getApplication(); if (app.mBMapManager == null) { app.mBMapManager = new BMapManager(getApplicationContext()); /** * 如果BMapManager沒有初始化則初始化BMapManager */ app.mBMapManager.init(MyApplication.strKey,new MyApplication.MyGeneralListener()); } setContentView(R.layout.activity_main); txtAddr=(EditText)findViewById(R.id.txtAddr);//關鍵字輸入框 //監聽搜尋單擊事件 btSerach= (TextView)findViewById(R.id.btOk); btSerach.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mMKSearch.poiSearchInCity("", txtAddr.getText().toString()); } }); //定位按鈕 requestLocButton = (TextView)findViewById(R.id.btget); requestLocButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { requestLocClick(); } }); //地圖初始化 mMapView = (MyLocationMapView)findViewById(R.id.bmapView); mMapView.setTraffic(true);//設定地圖模式為交通檢視(也可為衛星檢視) mMapController = mMapView.getController(); mMapView.getController().setZoom(15); mMapView.getController().enableClick(true); mMapView.setBuiltInZoomControls(true); //資訊檢索初始化 mMKSearch = new MKSearch(); mMKSearch.init(app.mBMapManager, new MKSearchListener() { @Override public void onGetAddrResult(MKAddrInfo arg0, int arg1) { } @Override public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) { } @Override public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) { } @Override public void onGetPoiDetailSearchResult(int arg0, int arg1) { } @Override public void onGetPoiResult(MKPoiResult res, int type, int error) { if (error == MKEvent.ERROR_RESULT_NOT_FOUND) { Toast.makeText(MainActivity.this, "抱歉,未找到結果", Toast.LENGTH_LONG).show(); return; } else if (error != 0 || res == null) { Toast.makeText(MainActivity.this, "搜尋出錯啦.."+error, Toast.LENGTH_LONG).show(); return; } PoiOverlay poiOverlay = new PoiOverlay(MainActivity.this, mMapView); poiOverlay.setData(res.getAllPoi()); mMapView.getOverlays().clear(); mMapView.getOverlays().add(poiOverlay); mMapView.refresh(); for (MKPoiInfo info : res.getAllPoi()) { if (info.pt != null) { mMapView.getController().animateTo(info.pt); break; } } } @Override public void onGetShareUrlResult(MKShareUrlResult arg0, int arg1, int arg2) { } @Override public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1){ } @Override public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) { } @Override public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) { } }); createPaopao(); //定位初始化 mLocClient = new LocationClient( this ); locData = new LocationData(); mLocClient.registerLocationListener( myListener ); LocationClientOption option = new LocationClientOption(); option.setOpenGps(true);//開啟gps option.setAddrType("all");//返回的定位結果包含地址資訊 option.disableCache(false);//禁止啟用快取定位 option.setCoorType("bd09ll"); //設定座標型別 option.setScanSpan(1000); mLocClient.setLocOption(option); mLocClient.start(); //定點陣圖層初始化 myLocationOverlay = new locationOverlay(mMapView); //設定定位資料 myLocationOverlay.setData(locData); //新增定點陣圖層 mMapView.getOverlays().add(myLocationOverlay); myLocationOverlay.enableCompass(); //修改定位資料後重新整理圖層生效 mMapView.refresh(); } /** * 手動觸發一次定位請求 */ public void requestLocClick(){ isRequest = true; mLocClient.requestLocation(); Toast.makeText(MainActivity.this, "正在定位……", Toast.LENGTH_SHORT).show(); } /** * 建立彈出泡泡圖層 */ public void createPaopao(){ viewCache = getLayoutInflater().inflate(R.layout.custom_text_view, null); popupText =(TextView) viewCache.findViewById(R.id.textcache); //泡泡點選響應回撥 PopupClickListener popListener = new PopupClickListener(){ @Override public void onClickedPopup(int index) { } }; pop = new PopupOverlay(mMapView,popListener); MyLocationMapView.pop = pop; } /** * 定位SDK監聽函式 */ public class MyLocationListenner implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { if (location == null) return ; locData.latitude = location.getLatitude(); locData.longitude = location.getLongitude(); //如果不顯示定位精度圈,將accuracy賦值為0即可 locData.accuracy = location.getRadius(); // 此處可以設定 locData的方向資訊, 如果定位 SDK 未返回方向資訊,使用者可以自己實現羅盤功能新增方向資訊。 locData.direction = location.getDerect(); //更新定位資料 myLocationOverlay.setData(locData); //更新圖層資料執行重新整理後生效 mMapView.refresh(); //是手動觸發請求或首次定位時,移動到定位點 if (isRequest || isFirstLoc){ //移動地圖到定位點 //Log.d("LocationOverlay", "receive location, animate to it"); mMapController.animateTo(new GeoPoint((int)(locData.latitude* 1e6), (int)(locData.longitude * 1e6))); isRequest = false; myLocationOverlay.setLocationMode(LocationMode.FOLLOWING); } //首次定位完成 isFirstLoc = false; } public void onReceivePoi(BDLocation poiLocation) { if (poiLocation == null){ return ; } } } //繼承MyLocationOverlay重寫dispatchTap實現點選處理 public class locationOverlay extends MyLocationOverlay{ public locationOverlay(MapView mapView) { super(mapView); } @Override protected boolean dispatchTap() { //處理點選事件,彈出泡泡 popupText.setBackgroundResource(R.drawable.popup); popupText.setText(mLocClient.getLastKnownLocation().getAddrStr()); pop.showPopup(BMapUtil.getBitmapFromView(popupText),new GeoPoint((int)(locData.latitude*1e6), (int)(locData.longitude*1e6)),8); return true; } } @Override protected void onPause() { mMapView.onPause(); if(app.mBMapManager!=null){ app.mBMapManager.stop(); } super.onPause(); } @Override protected void onResume() { mMapView.onResume(); if(app.mBMapManager!=null){ app.mBMapManager.start(); } super.onResume(); } @Override protected void onDestroy() { //退出時銷燬定位 if (mLocClient != null) mLocClient.stop(); mMapView.destroy(); if(app.mBMapManager!=null){ app.mBMapManager.destroy(); app.mBMapManager=null; } super.onDestroy(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mMapView.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); mMapView.onRestoreInstanceState(savedInstanceState); } @Override public boolean onCreateOptionsMenu(Menu menu) { return true; } }

相關推薦

Android定位&地圖&導航——基於地圖實現定義圖示繪製泡泡

public class MainActivity extends Activity { private EditText txtAddr; // 定位相關 LocationClient mLocClient; LocationData locData = nul

Android定位&地圖&導航——基於地圖移動獲取位置和自動定位

public class MainActivity extends Activity { public MyApplication app; static MapView mMapView = null; public MKMapViewListener mMapListen

Android定位&地圖&導航——基於地圖實現定位功能

public class MyApplication extends Application{ public LocationClient mLocationClient = null; public GeofenceClient mGeofenceClient; publi

基於API實現圖片文字識別功能(Java版)

1、登入百度AI開放平臺     (1)在頂部導航欄中,找到控制檯選項,並選擇文字識別功能,進入管理中心頁面        (2)在管理中心頁面中,找到建立應用按鈕並點選   (3)填寫應用名名稱和應用描述,選擇相應的應用型別,勾選自己需要的介面服

Android開發-基於地圖API開發仿滴滴出行APP介面的實現

前 言 近年來,由於移動網際網路快速的發展以及基於移動裝置的APP的普及,移動網際網路改變了人們的生活方式。從線上的電子支付到線下的出行,移動網際網路是當今社會人們生活不可或缺的一部分,而線下出行的網約車的出現極大便利了人們的出行,雖然它飽受了很大的爭議,但不可否認的是網約車的出現是

2016基於地圖定位

現在百度改版後有點不習慣,沒辦法,只有自己又去看了一下,比以前的簡單方便多,有時間我會把導航等給做出來,當然了這個程式碼只是對於初學者來的,因為我自己也是初學者,你自己也可以在百度API上去看,試著寫一遍,我這個主要的目的還是因為最近需要我才弄了一個定位的東西提

基於地圖開發網易班車地圖導航展示

col uri type open one 記錄 length () 代碼 來到網易已經不知不覺一兩個月了,最近把原來租的房子出租後,打算重新租一套房子。找到一個好房子不容易,首先考慮交通問題,上下班時間不能耗費太長,網易提供了遍布全城的班車系統,不過說實話,貌似只有文字說

基於地圖SDK和Elasticsearch GEO查詢的地理圍欄分析系統(3)-前端實現

方便 復制 類型 復制代碼 自動跳轉 rar 窗口 stack delete 轉載自:http://www.cnblogs.com/Auyuer/p/8086975.html MoonLight可視化訂單需求區域分析系統實現功能:   在現實生活中,計算機和互聯網迅速發展,

基於地圖API刪除指定的覆蓋物

引用百度地圖API過程中,想刪除指定的覆蓋物,有很多很多的坑。什麼clearOverlay()方法,直接給我所有覆蓋物都給乾沒了。還有網上介紹的removeOverlay(物件),這種又介紹不清楚,然後自己經過實踐,最終解決了。 直接上圖、上程式碼。 查詢所有地圖的覆蓋物程式碼: /

基於地圖API的WinForm地圖

      大概去年的這個時候,我用VB寫了一個百度地圖的Demo,使用了webBrowser載入本地網頁的方式,只是限於當時的技術,好多功能都沒實現,昨天,我重新對這個程式進行了編寫,這一次我使用的是C#。在正式開始之前,先來解決幾個問題。       一、地圖    

基於地圖SDK整合的一些功能

最近開發的專案用到了地圖,並在地圖上顯示某些座標位置的標記圖示,點選圖示來顯示此座標處的一些資訊,之後我從百度地圖卡房平臺下載了百度地圖的SDK和Demo,並結合API總結了一下幾點內容,實現了下面的幾個功能: (1)最基本功能,定位到當前位置 並獲

Android地圖3.0.0Marker覆蓋物

最近在學習百度地圖,發現百度地圖更新後,好多東西都改變了,ItemizedOverlay<OverlayItem>這個類更是找不到了。於是自己查了下最新的文件,發現彈窗效果百度提供InfoWindow來實現。 InfoWindow(v, LatLng, list

一個基於地圖的桌面軟體(附工程原始碼)

光陰似箭,日月如梭,恍然間,2013就這樣平平淡淡的過去了。想想工資卡上的餘額,心中不免浮起蛋蛋的憂桑。如果再回到2013。。。。。罷了,青春就是如此,每個人都肆無忌憚的揮霍著,在年華正當之時。或許只有當歲月的烙印狠狠落下的那一刻,我們才會想起那再也回不去的美好年華,那落英

iOS基於地圖的開發(1)——使用者當前位置

首先需要設定mapView的屬性: self.mapView = [[[BMKMapView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)] aut

使用瀏覽器定位功能初始化地圖

if(navigator.geolocation) { navigator.geolocation.getCurrentPosition(showPosition, showError); // HTML5獲取GPS裝置地理位置資訊 } else { docu

Android開發 用AndroidStudio開發地圖Demo的經典錯誤230的另一種可能

Authentication Error errorcode: 230 uid: -1 appid -1 msg: APP Scode碼校驗失敗 令人眼紅的字眼,這個神奇的錯誤折騰了我一晚上,一切都是

基於地圖做動態路線打點

// 百度地圖API功能 // 百度地圖獲取容器 var mp = new BMap.Map("allmap"); // 百度地圖定義中心點 mp.centerAndZoom(new BMap.Point(116.3964,39.9093), 15); //

Android Studio地圖開發(地圖

第一步、配置環境 1.申請百度地圖key 首先到百度地圖開放平臺,登入賬號,然後到如下介面 點選“建立應用”,到如下介面,填寫應用名稱,應用型別選擇“Android SDK” 獲取釋出版SHA1和開發版SHA1,連結如下百度提供的獲取SHA1的方法,注

隱藏 google 地圖 Logo 隱藏 地圖 Logo

隱藏 blog col -s container pan event contain first Google 地圖 var isFirstLoad=true; //地圖瓦片加載完成之後的回調 google.maps.event.addListener(map, ‘til

地圖】在地圖上框邊界線

程式碼: 一、建立地圖 建立地圖物件;設立中心點以及地圖級別。 var map = new BMap.Map("container"); map.centerAndZoom(new BMap.Point(116.403765, 39.914850), 12); 二、新增地圖事件