Android百度地图基础实现(标记+GPS)

来源:互联网 发布:淘宝怎么搜vr资源 编辑:程序博客网 时间:2024/06/14 18:12


package com.baidu.map;import java.util.ArrayList;import java.util.List;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Point;import android.graphics.drawable.Drawable;import android.location.Location;import android.location.LocationManager;import android.os.Bundle;import android.widget.Toast;import com.baidu.mapapi.BMapManager;import com.baidu.mapapi.GeoPoint;import com.baidu.mapapi.ItemizedOverlay;import com.baidu.mapapi.LocationListener;import com.baidu.mapapi.MKAddrInfo;import com.baidu.mapapi.MKDrivingRouteResult;import com.baidu.mapapi.MKPoiResult;import com.baidu.mapapi.MKSearchListener;import com.baidu.mapapi.MKTransitRouteResult;import com.baidu.mapapi.MKWalkingRouteResult;import com.baidu.mapapi.MapActivity;import com.baidu.mapapi.MapController;import com.baidu.mapapi.MapView;import com.baidu.mapapi.MyLocationOverlay;import com.baidu.mapapi.OverlayItem;import com.baidu.mapapi.PoiOverlay;import com.baidu.mapapi.Projection;public class BmapActivity extends MapActivity {// 定义地图引擎管理类private BMapManager mapManager;// 定义搜索服务类private MapView mapView;private MapController mapController;LocationListener mLocationListener = null;// onResume时注册此listener,onPause时需要RemoveMyLocationOverlay mLocationOverlay = null; // 定位图层private double dLat;private double dLon;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);// 初始化MapActivitymapManager = new BMapManager(getApplication());// init方法的第一个参数需填入申请的APIKeymapManager.init("DE7BC8B377AFA895ED0C16F504B5C4FC5E3E149B", null);super.initMapActivity(mapManager);mapView = (MapView) findViewById(R.id.map_View);// 设置地图模式为交通地图// mapView.setTraffic(true);// 设置启用内置的缩放控件mapView.setBuiltInZoomControls(true);mapView.displayZoomControls(true);// 设置在缩放动画过程中也显示overlay,默认为不绘制mapView.setDrawOverlayWhenZooming(true); mapController = mapView.getController();  mapController.setZoom(16);  //定位自己的位置 myself(); // 添加定位图层mLocationOverlay = new MyLocationOverlay(this, mapView);mapView.getOverlays().add(mLocationOverlay);Drawable marker = getResources().getDrawable(R.drawable.da_marker_red);marker.setBounds(0, 0, marker.getIntrinsicWidth(),marker.getIntrinsicHeight());// Intrinsic固有mapView.getOverlays().add(new MyItemizedOverlay(marker, this));}// 同一类型覆盖物的绘制class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {// 属性private Drawable marker;private Context mContext;private List<OverlayItem> geoList = new ArrayList<OverlayItem>();// 构造方法public MyItemizedOverlay(Drawable marker, Context context) {super(boundCenterBottom(marker));this.marker = marker;this.mContext = context;// 构造地理坐标GeoPoint p1 = new GeoPoint((int) (dLat * 1E6), (int) (dLon * 1E6));geoList.add(new OverlayItem(p1, "P1", "这是我的当前位置"));populate();// 执行填充方法}// 绘制方法public void draw(Canvas canvas, MapView mapView, boolean shadow) {// 投影,用于屏幕像素点坐标系统与地球经纬度点坐标系统的转换Projection projection = mapView.getProjection();for (int index = size() - 1; index >= 0; index--) {OverlayItem overlayItem = this.getItem(index);String title = overlayItem.getTitle();Point point = projection.toPixels(overlayItem.getPoint(), null);Paint painttext = new Paint();painttext.setColor(Color.BLACK);painttext.setTextSize(15);canvas.drawText(title, point.x - 30, point.y - 25, painttext);}super.draw(canvas, mapView, shadow);boundCenterBottom(marker);}// 添加成员方法@Overrideprotected OverlayItem createItem(int i) {return geoList.get(i);}@Overridepublic int size() {return geoList.size();}// 添加点击事件public boolean onTap(int i) {setFocus(geoList.get(i));Toast.makeText(this.mContext, geoList.get(i).getSnippet(),Toast.LENGTH_LONG).show();// snippet片段return true;}public boolean onTap(GeoPoint point, MapView mapView) {return super.onTap(point, mapView);}}// 定位到自己的位置public void myself() {LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE);Location l = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);if (l == null) {Toast.makeText(BmapActivity.this, "无法获取自己的位置", Toast.LENGTH_SHORT).show();/* 默认 的位置 */dLat = 34.824289;dLon = 113.689044; GeoPoint geoPoint = new GeoPoint((int) (dLat * 1e6), (int) (dLon * 1e6));  mapController.setCenter(geoPoint);} else {dLat = (int) (l.getLatitude() * 1E6);dLon = (int) (l.getLongitude() * 1E6);}} @Overrideprotected boolean isRouteDisplayed() {return false;}@Overrideprotected void onDestroy() {if (mapManager != null) {// 程序退出前需调用此方法mapManager.destroy();mapManager = null;}super.onDestroy();}@Overrideprotected void onPause() {if (mapManager != null) {// 终止百度地图APImapManager.getLocationManager().removeUpdates(mLocationListener);mLocationOverlay.disableMyLocation();mLocationOverlay.disableCompass(); // 关闭指南针mapManager.stop();}super.onPause();}@Overrideprotected void onResume() {if (mapManager != null) {// 开启百度地图API// 注册定位事件,定位后将地图移动到定位点mapManager.getLocationManager().requestLocationUpdates(mLocationListener);mLocationOverlay.enableMyLocation();mLocationOverlay.enableCompass(); // 打开指南针mapManager.start();}super.onResume();}/** * 实现MKSearchListener接口,用于实现异步搜索服务 *  * @author liufeng */public class MySearchListener implements MKSearchListener {/** *  * 根据经纬度搜索地址信息结果 *  * @param result *            搜索结果 * @param iError *            错误号 (0表示正确返回) */public void onGetAddrResult(MKAddrInfo result, int iError) {}/** * 驾车路线搜索结果 *  * @param result *            搜索结果 * @param iError *            错误号 */public void onGetDrivingRouteResult(MKDrivingRouteResult result,int iError) {}/** * * POI搜索结果(范围检索、城市POI检索、周边检索) * @param result 搜索结果 *  * @param type *            返回结果类型(11,12,21:poi列表 7:城市列表) * @param iError *            错误号(0表示正确返回) */public void onGetPoiResult(MKPoiResult result, int type, int iError) {if (result == null) {return;}// PoiOverlay是baidu map api提供的用于显示POI的OverlayPoiOverlay poioverlay = new PoiOverlay(BmapActivity.this, mapView);// 设置搜索到的POI数据poioverlay.setData(result.getAllPoi());// 在地图上显示PoiOverlay(将搜索到的兴趣点标注在地图上)mapView.getOverlays().add(poioverlay);}/** * 公交换乘路线搜索结果 * * @param result 搜索结果 * *  * @param iError *            错误号(0表示正确返回) * */public void onGetTransitRouteResult(MKTransitRouteResult result,int iError) {}/** * * 步行路线搜索结果 * *  * @param result *            搜索结果 * * @param iError *            错误号(0表示正确返回) * */public void onGetWalkingRouteResult(MKWalkingRouteResult result,int iError) {}}}


原创粉丝点击