Android學(xué)習(xí)筆記之百度地圖Overlay
地圖覆蓋物概述
所有疊加或覆蓋到地圖的內(nèi)容,我們統(tǒng)稱為地圖覆蓋物。如標(biāo)注、矢量圖形元素(包括:折線和多邊形和圓)、定位圖標(biāo)等。覆蓋物擁有自己的地理坐標(biāo),當(dāng)您拖動(dòng)或縮放地圖時(shí),它們會(huì)相應(yīng)的移動(dòng)。
地圖API提供了如下幾種覆蓋物:
- Overlay:覆蓋物的抽象基類,所有的覆蓋物均繼承此類的方法,實(shí)現(xiàn)用戶自定義圖層顯示。
- MyLocationOverlay:一個(gè)負(fù)責(zé)顯示用戶當(dāng)前位置的Overlay。
-
ItemizedOverlay<Item extends OverlayItem>:Overlay的一個(gè)基類,包含了一個(gè)OverlayItem列表,相當(dāng)于一組分條的Overlay,通過繼承此類,將一組興趣點(diǎn)顯示在地圖上。
-
PoiOverlay:本地搜索圖層,提供某一特定地區(qū)的位置搜索服務(wù),比如在北京市搜索“公園”,通過此圖層將公園顯示在地圖上。
-
RouteOverlay:步行、駕車導(dǎo)航線路圖層,將步行、駕車出行方案的路線及關(guān)鍵點(diǎn)顯示在地圖上。
-
TransitOverlay:公交換乘線路圖層,將某一特定地區(qū)的公交出行方案的路線及換乘位置顯示在地圖上。
覆蓋物的抽象基類:Overlay
一般來說,在MapView中添加一個(gè)Overlay需要經(jīng)過以下步驟:
- 自定義類繼承Overlay,并Override其draw()方法,如果需要點(diǎn)擊、按鍵、觸摸等交互操作,還需Override onTap()等方法。
- package xiaosi.baiduMap;
- import android.graphics.Canvas;
- import android.graphics.Paint;
- import android.graphics.Point;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import com.baidu.mapapi.BMapManager;
- import com.baidu.mapapi.GeoPoint;
- import com.baidu.mapapi.MapActivity;
- import com.baidu.mapapi.MapController;
- import com.baidu.mapapi.MapView;
- import com.baidu.mapapi.Overlay;
- public class BaiduMapActivity extends MapActivity
- {
- /** Called when the activity is first created. */
- private BMapManager mapManager = null;
- private String key = "1B79478DA01F7800AEA8602517A6D89B38151105";
- private MapView mapView = null;
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- mapManager = new BMapManager(getApplication());
- mapManager.init(key, null);
- super.initMapActivity(mapManager);
- mapView = (MapView) findViewById(R.id.mapsView);
- mapView.setBuiltInZoomControls(true); // 設(shè)置啟用內(nèi)置的縮放控件
- MapController mapController = mapView.getController(); // 得到mMapView的控制權(quán),可以用它控制和驅(qū)動(dòng)平移和縮放
- // GeoPoint point = new GeoPoint((int) (39.915 * 1E6),
- // (int) (116.404 * 1E6)); // 用給定的經(jīng)緯度構(gòu)造一個(gè)GeoPoint,單位是微度 (度 * 1E6)
- // mapController.setCenter(point); // 設(shè)置地圖中心點(diǎn)
- mapController.setZoom(12); // 設(shè)置地圖zoom級(jí)別
- mapView.getOverlays().add(new MyOverlay()); ///++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- }
- @Override
- protected boolean isRouteDisplayed()
- {
- return false;
- }
- @Override
- protected void onDestroy()
- {
- if (mapManager != null)
- {
- mapManager.destroy();
- mapManager = null;
- }
- super.onDestroy();
- }
- @Override
- protected void onPause()
- {
- if (mapManager != null)
- {
- mapManager.stop();
- }
- super.onPause();
- }
- @Override
- protected void onResume()
- {
- if (mapManager != null)
- {
- mapManager.start();
- }
- super.onResume();
- }
- public class MyOverlay extends Overlay
- {
- GeoPoint geoPoint = new GeoPoint((int) (39.915 * 1E6),
- (int) (116.404 * 1E6));
- Paint paint = new Paint();
- @Override
- public void draw(Canvas canvas, MapView mapView, boolean shadow)
- {
- // 在天安門的位置繪制一個(gè)String
- Point point = mapView.getProjection().toPixels(geoPoint, null);
- canvas.drawText("★這里是天安門", point.x, point.y, paint);
- }
- }
- }