中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

百度地圖開發總結

發布時間:2020-07-20 17:14:46 來源:網絡 閱讀:2164 作者:屠夫章哥 欄目:移動開發


1.  怎么接入百度SDK,百度文檔說得很明白,我就不說了。

2.  注意

   1)初始化的時候,上下文用全局的,即ApplicationContext。

   2)要在Activity的相應生命周期方法里調用MapView對應的生命周期方法。

3.  百度地圖的核心類:

   1)SDKInitializer 百度地圖初始化類

     》》注冊網絡錯誤、key驗證錯誤的廣播

     這樣一樣百度地圖崩潰了,或者出異常了,就知道有沒有可能是這一塊出現了問題。

private void initSDK() {
		SDKInitializer.initialize(getApplicationContext());
		//注冊網絡錯誤和KEY驗證失敗的廣播
		IntentFilter filter = new IntentFilter();
		filter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);
		filter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);
		registerReceiver(new MyReceiver(), filter);
	}  
	
	class MyReceiver extends BroadcastReceiver
	{
		@Override
		public void onReceive(Context context, Intent intent) {
			String action = intent.getAction();
			if(action.equals(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR)){
				Toast.makeText(getApplicationContext(), "網絡錯誤", 0).show();
			}else if(action.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)){
				Toast.makeText(getApplicationContext(), "key驗證失敗", 0).show();
			}
		}
	}

   2)MapView  顯示百度地圖的組件

     》》設置綻放按鈕顯示與隱藏

        mMapView.showZoomControls(false);  

     》》設置比例尺顯示與隱藏

        mMapView.showScaleControl(false);

     》》替換百度地圖logo

        將"baidumapapi_v3_3_0.jar"復制到桌面,然后解壓,將assets目錄下的logo_h,logo_l

        用自己的圖片替換掉。然后再將jar包拷貝回去。


     可以做addView操作,而BaiduMap是addOverlay()添加覆蓋物。


   3)BaiduMap  控制器  通過MapView.getMap()獲取

      》》設置地圖的狀態 map.setMapStatus(MapStatusUpdate)

         通過MapStatusUpdateFactory.方法()可以得到參數

    

           //設置地圖的綻放級別

         MapStatusUpdate zoom = MapStatusUpdateFactory.zoomTo(18);
	 map.setMapStatus(zoom);

      

          //設置中心點,注意LatLng的構造函數latitude,longtitude,分別為緯度、經度,在百度地

            圖上查的坐標與這個正好相反的。

             map.setMapStatus(MapStatusUpdateFactory.newLatLng(
         new LatLng(40.050513,116.30361)));

          Android百度地圖默認位置中心點設置

          http://blog.csdn.net/xyy410874116/article/details/32094157

           

           //旋轉百度地圖(以中心點) 

            

            //得到地圖之前的狀態和角度
        MapStatus mapStatus = map.getMapStatus();
        	float preRotate = mapStatus.rotate;
        	//利用MapStatus.Builder靜態內部類來構造新的狀態,對之前狀態的角度累加一個
        	  值。
        	Builder builder = new MapStatus.Builder();
        	MapStatus newStatus = builder.rotate(preRotate + 30).build();
        	//將新的狀態設置給百度地圖
        	map.setMapStatus(MapStatusUpdateFactory.newMapStatus(newStatus));

           //翻轉百度地圖(以直線),改變俯角,也就是看百度地圖的角度。

          

                    MapStatus mapStatus2 = map.getMapStatus();
		float preOverlook = mapStatus2.overlook;
		Builder builder2 = new MapStatus.Builder();
		MapStatus newStatus2 = builder2.overlook(preOverlook - 5 ).build();
		map.setMapStatus(MapStatusUpdateFactory.newMapStatus(newStatus2));

          //移動百度地圖到指定中心點

            animateMapStatus方法有重載形式,可以指定動畫的時長。(默認300ms)

                MapStatusUpdate statusUpdate = MapStatusUpdateFactory.newLatLng(
                LatLng(39.979982, 116.309258));
	    map.animateMapStatus(statusUpdate);

    》》更改底圖和添加交通圖圖層

       //底圖設置為默認的

            map.setMapType(BaiduMap.MAP_TYPE_NORMAL);

       //底圖設置成衛星圖

            map.setMapType(BaiduMap.MAP_TYPE_SATELLITE);

         //顯示交通圖圖層

            map.setTrafficEnabled(true);

   4)OverlayOptions 本地覆蓋物的抽象基類

     OverlavOptions關于覆蓋物的操作:

     1)創建覆蓋物

    2)給覆蓋物添加數據

      一般都要設置坐標(覆蓋物具體擺在哪兒)

      其它的。。。  

    3)把覆蓋物添加到地圖上



     例1:添加圓形覆蓋物 CircleOptions

      

           //創建圓形覆蓋物
		CircleOptions options = new CircleOptions();
	   //設置數據
		//圓心坐標
		options.center(new LatLng(40.050513,116.30361))
		//圓半徑
		.radius(1000)
		//填充顏色
		.fillColor(Color.BLUE)
		//圓的邊框寬度和顏色
		.stroke(new Stroke(5, Color.RED));
	   //將覆蓋物添加到地圖上
		map.addOverlay(options);

     效果如下圖:

        百度地圖開發總結


     例2:添加文字覆蓋物  TextOptions

       

        TextOptions options = new TextOptions();
		options.fontColor(Color.BLUE)
		.fontSize(100)
		.bgColor(0x3300ff00)
		.rotate(30)
		.typeface(Typeface.SERIF)
		.position(new LatLng(40.050513,116.30361))
		.text("我在北京");
		map.addOverlay(options);

     效果如下圖:

        百度地圖開發總結 


    通過上面的兩個例子,發現,文字(包括百度地圖本身的文字)并不會隨著地圖一起縮放,

    但是圓形覆蓋物會隨著地圖一起縮放。


   例3:添加標記覆蓋物  MarkerOptions

    

                MarkerOptions options = new MarkerOptions();
		BitmapDescriptor icon;
		options.position(testPos)
		.title("我在北京")
		//是否可拖拽
		.draggable(true)
		//圖標(工廠創建)
		.icon(BitmapDescriptorFactory.fromResource(R.drawable.eat_icon));
		map.addOverlay(options);

   作為一個注重產品性能的程序員,應該在設置icon的時候創建一個BitmapDescriptor的引用,

   在onDestroy里回收資源

   

         //釋放圖片資源
         bitmapDescriptor.recycle();

    4)OverlavManager 搜索覆蓋物的抽象基類 

     顯示和管理多個Overlay的基類   

        |--本地搜索覆蓋物:PoiOverlay

       |--駕車路線覆蓋物:DrivingRouteOverlay

       |--步行路線覆蓋物:WalkingRouteOverlay

        |--換乘路線覆蓋物:TransitOverlay

       |--公交路線覆蓋物:BusLineOverlay

      

     百度地圖移動版API集成搜索服務包括

        |---位置檢索、周邊檢索、范圍檢索  (點搜索)

             使用PoiSearch和OnGetPoiSearchResultListener核心類

        |---公交檢索、駕乘檢索、步行檢索  (線搜索)

           使用RoutePlanSearch和OnGetRoutePlanResultListener核心類

      

       

    POI(Point of Interest興趣點)搜索有三種方式

        根據范圍和檢索詞發起范圍檢索searchInBound

        周邊檢索searchNearby

        城市poi檢索searchInCity

        poi詳細信息檢索 searchPoiDetail

    結果的展示: PoiOverlay

    

     例1:搜索指定范圍內的加油站(矩形區域搜索)

      

        private void search() {
		PoiSearch search = PoiSearch.newInstance();
		search.setOnGetPoiSearchResultListener(new MyOnGetPoiSearchResultListener());
		
		//范圍內搜索
		PoiBoundSearchOption boundOption = new PoiBoundSearchOption();
		//搜索關鍵字
		boundOption.keyword("加油站");
		//搜索范圍
		LatLngBounds latLngBounds = new LatLngBounds.Builder()
		.include(new LatLng(39.98, 116.310))
		.include(new LatLng(39.96, 116.30))
		.build();
		boundOption.bound(latLngBounds);
		
		search.searchInBound(boundOption);
	}
	
	class MyOnGetPoiSearchResultListener implements OnGetPoiSearchResultListener
	{

		@Override
		public void onGetPoiDetailResult(PoiDetailResult arg0) {
			//詳情搜索在此處理結果
		}

		@Override
		public void onGetPoiResult(PoiResult result) {
			if(result == null || result.error == 
			    SearchResult.ERRORNO.RESULT_NOT_FOUND)
			{
				return ;  //無搜索結果
			}
			//找到搜索結果
			
			//創建覆蓋物
			MyOverlay overlay = new MyOverlay(map);
			
			//++++++++監聽覆蓋物的點擊事件++++++++++
			map.setOnMarkerClickListener(overlay);
			
			//為覆蓋物綁定數據
			overlay.setData(result);
			
			//將覆蓋物添加到地圖上
			overlay.addToMap();
			
			//顯示全部的搜索結果
			overlay.zoomToSpan();
		}
	}
	
	//自定義一個實現了點擊事件的覆蓋物
	class MyOverlay extends PoiOverlay
	{

		public MyOverlay(BaiduMap arg0) {
			super(arg0);
		}
		
		@Override
		public boolean onPoiClick(int index) {
			PoiResult result = getPoiResult();
			//在搜索集中找到被點擊的覆蓋物的信息
			PoiInfo poiInfo = result.getAllPoi().get(index);
			Toast.makeText(getApplicationContext(), poiInfo.address, 0).show();
			return super.onPoiClick(index);
		}
	}

  

    例2:搜索周邊的地鐵站(圓形區域搜索)

     原理和加油站的搜索一下,只是PoiSearch調用的方法及方法的參數不同,監聽者不用改變。

    可以進行共用。

    PoiNearbySearchOption nearbySearchOption = new PoiNearbySearchOption();
		nearbySearchOption.keyword("地鐵站")
		.radius(1000)
		.location(testPos);
	search.searchNearby(nearbySearchOption);

   上面兩個例子,MyOverlay在監聽點擊的時候,得到了覆蓋物的PoiInfo,通過PoiInfo又可以得

     到uid,根據uid就可以發起詳情搜索:

    //詳情搜索
	protected void detailSearch(PoiInfo poiInfo) {
	    PoiDetailSearchOption detailSearchOption = new PoiDetailSearchOption();
	    detailSearchOption.poiUid(poiInfo.uid);
	  search.searchPoiDetail(detailSearchOption);
	}

   監聽詳情搜索結果 

@Override
   public void onGetPoiDetailResult(PoiDetailResult result) {
     if(result == null || result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND)
     {
	return ;
      }
     Toast.makeText(getApplicationContext(),"電話:" +  result.getTelephone(), 0).show();
   }

  

     例3:城市搜索 

    //城市搜索
	private void citySearch() {
		PoiCitySearchOption citySearchOption = new PoiCitySearchOption();
		citySearchOption.city("北京")
		.keyword("武術館")
		.pageNum(pageIndex ++);	  //分布顯示數據
		search.searchInCity(citySearchOption);
	}

   注意分頁顯示數據的時候,要清除之前的數據,在onGetPoiResult方法里:

    //清除數據,防止分布的時候顯示前一頁的數據。
      map.clear();

     


4.  百度地圖高級開發:  

  案例1:泡泡提示信息

   第1步:初始化PopView,并添加到MapView當中,隱藏PopView

    private void initPop() {
		pop = View.inflate(getApplicationContext(), R.layout.mark_item, null);
    	tip = (TextView) pop.findViewById(R.id.tv);
    	
    	MapViewLayoutParams params = new MapViewLayoutParams.Builder()
    	.layoutMode(ELayoutMode.mapMode)
    	.position(testPos)
    	.width(MapViewLayoutParams.WRAP_CONTENT)
    	.height(MapViewLayoutParams.WRAP_CONTENT)
    	.build();
    	
    	mMapView.addView(pop,params);
    	pop.setVisibility(View.INVISIBLE);
    }

   第2步:為BaiduMap添加Marker覆蓋物的點擊監聽

      map.setOnMarkerClickListener(this);

   第3步:處理點擊事件

     將PopView定位到Marker的位置、獲得Marker的信息并展示到PopView上去。

    @Override
	public boolean onMarkerClick(Marker marker) {
		MapViewLayoutParams params = new MapViewLayoutParams.Builder()
    	.layoutMode(ELayoutMode.mapMode)
    	.position(marker.getPosition())
    	.width(MapViewLayoutParams.WRAP_CONTENT)
    	.height(MapViewLayoutParams.WRAP_CONTENT)
    	.build();
		
		mMapView.updateViewLayout(pop, params);
		pop.setVisibility(View.VISIBLE);
		tip.setText(marker.getTitle());
		
		return true;
	}

   效果圖如下:

      百度地圖開發總結


4.  百度地圖定位SDK使用:

    上面講的的這些,都是地圖SDK的開發。下面要說的就是定位SDK使用,就是定位手機當前的

   位置。照著百度定位SDK開發文檔做,但是代碼需要有一定的改動。

     代碼如下:

public class LocateActivity extends BaseActivity {
	public LocationClient mLocationClient = null;
	public BDLocationListener myListener = new MyLocationListener();
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		 mLocationClient = new LocationClient(getApplicationContext());     //聲明LocationClient類
		mLocationClient.registerLocationListener( myListener );    //注冊監聽函數
		
		initLocation();
	}
	
	@Override
	protected void onStart() {
		super.onStart();
		mLocationClient.start();
	}
	
	@Override
	protected void onStop() {
		super.onStop();
		mLocationClient.stop();
	}
	
	private void initLocation(){
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationMode.Hight_Accuracy
);//可選,默認高精度,設置定位模式,高精度,低功耗,僅設備
        option.setCoorType("bd09ll");//可選,默認gcj02,設置返回的定位結果坐標系
        int span=1000;
        option.setScanSpan(span);//可選,默認0,即僅定位一次,設置發起定位請求的間隔需要大于等于1000ms才是有效的
        option.setIsNeedAddress(true);//可選,設置是否需要地址信息,默認不需要
        option.setOpenGps(true);//可選,默認false,設置是否使用gps
        option.setLocationNotify(true);//可選,默認false,設置是否當gps有效時按照1S1次頻率輸出GPS結果
option.setIgnoreKillProcess(false);//可選,默認false,定位SDK內部是一個SERVICE,并放到了獨立進程,設置是否在stop的時候殺死這個進程,默認殺死
        option.SetIgnoreCacheException(false);//可選,默認false,設置是否收集CRASH信息,默認收集
        mLocationClient.setLocOption(option);
        
        
        //設置自己的定位圖標
        BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.icon_geo);
        MyLocationConfiguration configuration = new MyLocationConfiguration(MyLocationConfiguration.LocationMode.COMPASS, true, icon);
        map.setMyLocationConfigeration(configuration);
    }
	
	public class MyLocationListener implements BDLocationListener {
        @Override
        public void onReceiveLocation(BDLocation location) {
            //Receive Location
        	Builder builder = new MyLocationData.Builder();
        	builder.latitude(location.getLatitude())  //緯度
        	.longitude(location.getLongitude());	//經度
        	
        	map.setMyLocationEnabled(true);      //允許定位圖層
            map.setMyLocationData(builder.build());  //設置定位數據
        }
	}
	
}


向AI問一下細節
推薦閱讀:
  1. tomcat總結
  2. html總結

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

延安市| 清新县| 塔河县| 澄江县| 海林市| 五大连池市| 盐边县| 化州市| 安吉县| 明溪县| 平和县| 曲沃县| 射洪县| 双桥区| 商都县| 策勒县| 正宁县| 静海县| 栾川县| 环江| 铜鼓县| 日土县| 株洲县| 华坪县| 孝感市| 祁连县| 北碚区| 建平县| 民县| 宁国市| 利津县| 黔江区| 黑水县| 苏尼特右旗| 阳山县| 汤阴县| 孟村| 天全县| 普宁市| 江西省| 枣强县|