1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 百度地图上定位自己所在的位置

百度地图上定位自己所在的位置

时间:2021-06-15 00:42:47

相关推荐

百度地图上定位自己所在的位置

一、运行效果图

二、核心代码

package com.itheima.baidumap74;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.MapStatusUpdate;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.UiSettings;import com.baidu.mapapi.model.LatLng;import com.itheima.baidumap74.util.Utils;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.Gravity;import android.widget.Toast;public abstract class BaseActivity extends Activity {private static final String TAG = "BaseActivity";/** 黑马坐标(北京市海淀区东北旺南路45号)*/protected LatLng hmPos = new LatLng(40.050513, 116.30361);/** 传智坐标 */protected LatLng czPos = new LatLng(40.065817,116.349902);/** 天安门坐标 */protected LatLng tamPos = new LatLng(39.915112,116.403963);protected MapView mapView;protected BaiduMap baiduMap;// 这里加final是为了不让子类覆盖,原因是为了预防这里的一些类还没初始化的时候就被子类调用@Overrideprotected final void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取地图控件引用 mapView = (MapView) findViewById(R.id.bmapView); baiduMap = mapView.getMap();// 获取地图控制器// 1.隐藏缩放按钮、比例尺// mapView.showScaleControl(false);// 隐藏比例按钮,默认是显示的// mapView.showZoomControls(false);// 隐藏缩放按钮,默认是显示的// 2.获取获取最小(3)、最大缩放级别(20)float maxZoomLevel = baiduMap.getMaxZoomLevel(); // 获取地图最大缩放级别float minZoomLevel = baiduMap.getMinZoomLevel(); // 获取地图最小缩放级别Log.i(TAG, "minZoomLevel = " + minZoomLevel + ", maxZoomLevel" + maxZoomLevel);// 3.设置地图中心点为黑马MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLng(hmPos);baiduMap.setMapStatus(mapStatusUpdate);// 4.设置地图缩放为15mapStatusUpdate = MapStatusUpdateFactory.zoomTo(15);baiduMap.setMapStatus(mapStatusUpdate);// 6.获取地图Ui控制器:隐藏指南针// UiSettings uiSettings = baiduMap.getUiSettings();// uiSettings.setCompassEnabled(false);// 不显示指南针init();}/** 这个方法让子类实现 */public abstract void init();/*** 在屏幕中央显示一个Toast* @param text*/public void showToast(CharSequence text) {Utils.showToast(this, text);}@Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 mapView.onDestroy(); } @Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 mapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 mapView.onPause(); } }

package com.itheima.baidumap74;import com.baidu.mapapi.map.CircleOptions;import com.baidu.mapapi.map.Stroke;public class CircelOverlayActivity extends BaseActivity {@Overridepublic void init() {CircleOptions options = new CircleOptions();// 创建一个圆形覆盖物的参数options.center(hmPos)// 圆心.radius(1000)// 半径.stroke(new Stroke(20, 0x55FF0000))// 线条宽度、颜色.fillColor(0x5500FF00);// 圆的填充颜色baiduMap.addOverlay(options);// 添加一个覆盖物}}

package com.itheima.baidumap74;import com.baidu.mapapi.SDKInitializer;import com.itheima.baidumap74.util.Utils;import android.app.ListActivity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.view.View;import android.widget.ArrayAdapter;import android.widget.ListView;public class DemoListActivity extends ListActivity {private BroadcastReceiver receiver;private ClassAndName[] datas = {new ClassAndName(HelloBaiduMapActivity.class, "HelloBaiduMap"),new ClassAndName(MapLayerActivity.class, "地图图层"),new ClassAndName(CircelOverlayActivity.class, "圆形覆盖物"),new ClassAndName(TextOverlayActivity.class, "文字覆盖物"),new ClassAndName(MarkerOverlayActivity.class, "标志覆盖物"),new ClassAndName(SearchInBoundActivity.class, "在范围内搜索"),new ClassAndName(SearchInCityActivity.class, "在城市内搜索"),new ClassAndName(SearchInNearbyActivity.class, "在周边内搜索"),new ClassAndName(DrivingSearchActivity.class, "驾车路线搜索"),new ClassAndName(TransitSearchActivity.class, "换乘路线搜索"),new ClassAndName(WalkingSearchActivity.class, "步行路线搜索"),new ClassAndName(LocationActivity.class, "定位"),};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);registerSDKCheckReceiver();ArrayAdapter<ClassAndName> adapter = new ArrayAdapter<DemoListActivity.ClassAndName>(this, android.R.layout.simple_list_item_1, datas);setListAdapter(adapter);}@Overrideprotected void onListItemClick(ListView l, View v, int position, long id) {// 取出单击位置的ClassAndNameClassAndName classAndName = (ClassAndName) l.getItemAtPosition(position);startActivity(new Intent(this, classAndName.clazz));}class ClassAndName {/** 用于保存Activity的字节码 */public Class<?> clazz;/** 用于保存Activity对应的名字 */public String name;public ClassAndName(Class<?> cls, String name) {this.clazz = cls;this.name = name;}@Overridepublic String toString() {return name;}}private void registerSDKCheckReceiver() {receiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR.equals(action)) {Utils.showToast(DemoListActivity.this, "网络错误");} else if (SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR.equals(action)) {Utils.showToast(DemoListActivity.this, "key验证失败");}}};IntentFilter filter = new IntentFilter();// 监听网络错误filter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);// 监听百度地图sdk 的key是否正确filter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);registerReceiver(receiver, filter);}@Overrideprotected void onDestroy() {unregisterReceiver(receiver);super.onDestroy();}}

package com.itheima.baidumap74;import java.util.ArrayList;import java.util.List;import com.baidu.mapapi.overlayutil.DrivingRouteOverlay;import com.baidu.mapapi.search.route.DrivingRouteLine;import com.baidu.mapapi.search.route.DrivingRoutePlanOption;import com.baidu.mapapi.search.route.DrivingRouteResult;import com.baidu.mapapi.search.route.PlanNode;import com.baidu.mapapi.search.route.TransitRouteResult;import com.baidu.mapapi.search.route.WalkingRouteResult;public class DrivingSearchActivity extends RoutePlanSearchBaseActivity {@Overridepublic void routePlanSearchInit() {routePlanSearch.drivingSearch(getSearchParams());}private DrivingRoutePlanOption getSearchParams() {DrivingRoutePlanOption params = new DrivingRoutePlanOption();List<PlanNode> nodes = new ArrayList<PlanNode>();nodes.add(PlanNode.withCityNameAndPlaceName("北京市", "天安门"));params.from(PlanNode.withLocation(hmPos));// 设置起点params.passBy(nodes);// 设置途经点params.to(PlanNode.withLocation(czPos));// 设置终点return params;}/** 获取驾车搜索结果的回调方法 */@Overridepublic void onGetDrivingRouteResult(DrivingRouteResult result) {DrivingRouteOverlay overlay = new DrivingRouteOverlay(baiduMap);baiduMap.setOnMarkerClickListener(overlay);List<DrivingRouteLine> routeLines = result.getRouteLines();// 获取到所有的搜索路线,最优化的路线会在集合的前面overlay.setData(routeLines.get(0));// 把搜索结果设置到覆盖物overlay.addToMap();// 把搜索结果添加到地图overlay.zoomToSpan();// 把搜索结果在一个屏幕内显示完}/** 获取换乘(公交、地铁)搜索结果的回调方法 */@Overridepublic void onGetTransitRouteResult(TransitRouteResult result) {}/** 获取步行搜索结果的回调方法 */@Overridepublic void onGetWalkingRouteResult(WalkingRouteResult result) {}}

package com.itheima.baidumap74;import android.util.Log;import android.view.KeyEvent;import com.baidu.mapapi.map.MapStatus;import com.baidu.mapapi.map.MapStatusUpdate;import com.baidu.mapapi.map.MapStatusUpdateFactory;public class HelloBaiduMapActivity extends BaseActivity {private static final String TAG = "HelloBaiduMapActivity";@Overridepublic void init() {}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// 5.更新地图状态MapStatusUpdate mapStatusUpdate = null;switch (keyCode) {case KeyEvent.KEYCODE_1:// 1)缩小mapStatusUpdate = MapStatusUpdateFactory.zoomOut();break;case KeyEvent.KEYCODE_2:// 2)放大mapStatusUpdate = MapStatusUpdateFactory.zoomIn();break;case KeyEvent.KEYCODE_3:// 3)旋转(0 ~ 360),每次在原来的基础上再旋转30度MapStatus currentMapStatus = baiduMap.getMapStatus();// 获取地图当前的状态float rotate = currentMapStatus.rotate + 30;Log.i(TAG, "rotate = " + rotate);MapStatus mapStatus = new MapStatus.Builder().rotate(rotate).build();mapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mapStatus);break;case KeyEvent.KEYCODE_4:// 4)俯仰(0 ~ -45),每次在原来的基础上再俯仰-5度currentMapStatus = baiduMap.getMapStatus();// 获取地图当前的状态float overlook = currentMapStatus.overlook - 5;Log.i(TAG, "overlook = " + overlook);mapStatus = new MapStatus.Builder().overlook(overlook).build();mapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mapStatus);break;case KeyEvent.KEYCODE_5:// 5)移动mapStatusUpdate = MapStatusUpdateFactory.newLatLng(czPos);baiduMap.animateMapStatus(mapStatusUpdate, 2000);return super.onKeyDown(keyCode, event);}baiduMap.setMapStatus(mapStatusUpdate);return super.onKeyDown(keyCode, event);}}

package com.itheima.baidumap74;import java.util.List;import android.util.Log;import android.view.KeyEvent;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.location.LocationClientOption.LocationMode;import com.baidu.location.Poi;import com.baidu.mapapi.map.BitmapDescriptor;import com.baidu.mapapi.map.BitmapDescriptorFactory;import com.baidu.mapapi.map.MyLocationConfiguration;import com.baidu.mapapi.map.MyLocationData;public class LocationActivity extends BaseActivity {public LocationClient mLocationClient = null;public BDLocationListener myListener = new MyLocationListener();public class MyLocationListener implements BDLocationListener {// 在这个方法里面接收定位结果@Overridepublic void onReceiveLocation(BDLocation location) {if (location != null) {MyLocationData.Builder builder = new MyLocationData.Builder();builder.accuracy(location.getRadius());// 设置精度builder.direction(location.getDirection());// 设置方向builder.latitude(location.getLatitude());// 设置纬度builder.longitude(location.getLongitude());// 设置经度MyLocationData locationData = builder.build();baiduMap.setMyLocationData(locationData);// 把定位数据显示到地图上}//Receive LocationStringBuffer sb = new StringBuffer(256);sb.append("time : ");sb.append(location.getTime());sb.append("\nerror code : ");sb.append(location.getLocType());sb.append("\nlatitude : ");sb.append(location.getLatitude());sb.append("\nlontitude : ");sb.append(location.getLongitude());sb.append("\nradius : ");sb.append(location.getRadius());if (location.getLocType() == BDLocation.TypeGpsLocation){// GPS定位结果sb.append("\nspeed : ");sb.append(location.getSpeed());// 单位:公里每小时sb.append("\nsatellite : ");sb.append(location.getSatelliteNumber());sb.append("\nheight : ");sb.append(location.getAltitude());// 单位:米sb.append("\ndirection : ");sb.append(location.getDirection());// 单位度sb.append("\naddr : ");sb.append(location.getAddrStr());sb.append("\ndescribe : ");sb.append("gps定位成功");} else if (location.getLocType() == BDLocation.TypeNetWorkLocation){// 网络定位结果sb.append("\naddr : ");sb.append(location.getAddrStr());//运营商信息sb.append("\noperationers : ");sb.append(location.getOperators());sb.append("\ndescribe : ");sb.append("网络定位成功");} else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果sb.append("\ndescribe : ");sb.append("离线定位成功,离线定位结果也是有效的");} else if (location.getLocType() == BDLocation.TypeServerError) {sb.append("\ndescribe : ");sb.append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@,会有人追查原因");} else if (location.getLocType() == BDLocation.TypeNetWorkException) {sb.append("\ndescribe : ");sb.append("网络不同导致定位失败,请检查网络是否通畅");} else if (location.getLocType() == BDLocation.TypeCriteriaException) {sb.append("\ndescribe : ");sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");}sb.append("\nlocationdescribe : ");sb.append(location.getLocationDescribe());// 位置语义化信息List<Poi> list = location.getPoiList();// POI数据if (list != null) {sb.append("\npoilist size = : ");sb.append(list.size());for (Poi p : list) {sb.append("\npoi= : ");sb.append(p.getId() + " " + p.getName() + " " + p.getRank());}}Log.i("BaiduLocationApiDem", sb.toString());}}@Overridepublic void init() {mLocationClient = new LocationClient(getApplicationContext());//声明LocationClient类mLocationClient.registerLocationListener(myListener); //注册监听函数initLocation();baiduMap.setMyLocationEnabled(true);// 开启定位图层setMyLocationConfigeration(PASS);mLocationClient.start();// 开始定位}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {switch (keyCode) {case KeyEvent.KEYCODE_1:// 罗盘态,显示定位方向圈,保持定位图标在地图中心setMyLocationConfigeration(PASS);break;case KeyEvent.KEYCODE_2:// 跟随态,保持定位图标在地图中心setMyLocationConfigeration(MyLocationConfiguration.LocationMode.FOLLOWING);break;case KeyEvent.KEYCODE_3:// 普通态: 更新定位数据时不对地图做任何操作setMyLocationConfigeration(MyLocationConfiguration.LocationMode.NORMAL);break;default:break;}return super.onKeyDown(keyCode, event);}/** 设置定位图层的配置 */private void setMyLocationConfigeration(MyLocationConfiguration.LocationMode mode) {boolean enableDirection = true;// 设置允许显示方向BitmapDescriptor customMarker = BitmapDescriptorFactory.fromResource(R.drawable.icon_geo);// 自定义定位的图标MyLocationConfiguration config = new MyLocationConfiguration(mode, enableDirection, customMarker);baiduMap.setMyLocationConfigeration(config);}@Overrideprotected void onDestroy() {mLocationClient.stop();// 停止定位super.onDestroy();}private void initLocation(){LocationClientOption option = new LocationClientOption();option.setLocationMode(LocationMode.Hight_Accuracy);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系int span= 5000;option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要option.setOpenGps(true);//可选,默认false,设置是否使用gpsoption.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到option.setIgnoreKillProcess(false);//可选,默认false,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认杀死option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要mLocationClient.setLocOption(option);}}

package com.itheima.baidumap74;import com.baidu.mapapi.map.BaiduMap;import android.view.KeyEvent;public class MapLayerActivity extends BaseActivity {@Overridepublic void init() {}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {switch (keyCode) {case KeyEvent.KEYCODE_1:// 显示普通地图baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);baiduMap.setTrafficEnabled(false);break;case KeyEvent.KEYCODE_2:// 显示卫星图baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);baiduMap.setTrafficEnabled(false);break;case KeyEvent.KEYCODE_3:// 交通图baiduMap.setTrafficEnabled(true);break;}return super.onKeyDown(keyCode, event);}}

package com.itheima.baidumap74;import android.view.View;import android.widget.TextView;import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;import com.baidu.mapapi.map.BaiduMap.OnMarkerDragListener;import com.baidu.mapapi.map.BitmapDescriptor;import com.baidu.mapapi.map.BitmapDescriptorFactory;import com.baidu.mapapi.map.MapViewLayoutParams;import com.baidu.mapapi.map.MapViewLayoutParams.ELayoutMode;import com.baidu.mapapi.map.Marker;import com.baidu.mapapi.map.MarkerOptions;import com.baidu.mapapi.model.LatLng;public class MarkerOverlayActivity extends BaseActivity {private View pop;private TextView tv_title;@Overridepublic void init() {initMarker();baiduMap.setOnMarkerClickListener(mOnMarkerClickListener);baiduMap.setOnMarkerDragListener(mOnMarkerDragListener);}/** 标志拖动监听器 */OnMarkerDragListener mOnMarkerDragListener = new OnMarkerDragListener() {/** 标志开始拖动 */@Overridepublic void onMarkerDragStart(Marker marker) {mapView.updateViewLayout(pop, createLayoutParams(marker.getPosition()));}/** 标志拖动结束 */@Overridepublic void onMarkerDragEnd(Marker marker) {mapView.updateViewLayout(pop, createLayoutParams(marker.getPosition()));}/** 标志正在拖动 */@Overridepublic void onMarkerDrag(Marker marker) {mapView.updateViewLayout(pop, createLayoutParams(marker.getPosition()));}};OnMarkerClickListener mOnMarkerClickListener = new OnMarkerClickListener() {@Overridepublic boolean onMarkerClick(Marker marker) {// 显示一个泡泡if (pop == null) {pop = View.inflate(MarkerOverlayActivity.this, R.layout.pop, null);tv_title = (TextView) pop.findViewById(R.id.tv_title);mapView.addView(pop, createLayoutParams(marker.getPosition()));} else {mapView.updateViewLayout(pop, createLayoutParams(marker.getPosition()));}tv_title.setText(marker.getTitle());return true;}};/** 初始化标志 */private void initMarker() {MarkerOptions options = new MarkerOptions();BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.icon_eat);options.position(hmPos)// 位置.title("黑马")// title.icon(icon)// 图标.draggable(true);// 设置图标可以拖动baiduMap.addOverlay(options);// 添加一个向北的标志options = new MarkerOptions().icon(icon).title("向北").position(new LatLng(hmPos.latitude + 0.001, hmPos.longitude)).draggable(true);baiduMap.addOverlay(options);// 添加一个向东的标志options = new MarkerOptions().icon(icon).title("向东").position(new LatLng(hmPos.latitude, hmPos.longitude + 0.001)).draggable(true);baiduMap.addOverlay(options);// 添加一个向西南的标志options = new MarkerOptions().icon(icon).title("向西南").position(new LatLng(hmPos.latitude - 0.001, hmPos.longitude - 0.001)).draggable(true);baiduMap.addOverlay(options);}/*** 创建一个布局参数* @param position* @return*/private MapViewLayoutParams createLayoutParams(LatLng position) {MapViewLayoutParams.Builder buidler = new MapViewLayoutParams.Builder(); buidler.layoutMode(ELayoutMode.mapMode);// 指定坐标类型为经纬度buidler.position(position);// 设置标志的位置buidler.yOffset(-25);// 设置View往上偏移MapViewLayoutParams params = buidler.build();return params;}}

package com.itheima.baidumap74;import android.app.Application;import com.baidu.mapapi.SDKInitializer;public class MyApplication extends Application {@Overridepublic void onCreate() {//在使用SDK各组件之前初始化context信息,传入ApplicationContext //注意该方法要再setContentView方法之前实现 SDKInitializer.initialize(getApplicationContext()); }}

package com.itheima.baidumap74;import com.baidu.mapapi.overlayutil.PoiOverlay;import com.baidu.mapapi.search.core.PoiInfo;import com.baidu.mapapi.search.core.SearchResult;import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;import com.baidu.mapapi.search.poi.PoiResult;import com.baidu.mapapi.search.poi.PoiSearch;public abstract class PoiSearchBaseActivity extends BaseActivity implements OnGetPoiSearchResultListener{protected PoiSearch poiSearch;protected PoiOverlay poiOverlay;@Overridepublic final void init() {// 因为其它搜索也需要这个实例,所以放在父类初始,这样的话子类就不需要再实例化poiSearch = PoiSearch.newInstance();poiSearch.setOnGetPoiSearchResultListener(this);poiOverlay = new PoiOverlay(baiduMap) {@Overridepublic boolean onPoiClick(int index) {return PoiSearchBaseActivity.this.onPoiClick(index);}};baiduMap.setOnMarkerClickListener(poiOverlay);poiSearchInit();}/*** 生成这个方法,是为了让子类可以覆盖* @param index* @return*/public boolean onPoiClick(int index) {PoiInfo poiInfo = poiOverlay.getPoiResult().getAllPoi().get(index);showToast(poiInfo.name + ", " + poiInfo.address);return true;}/** poi搜索的初始化代码写在这个方法 */public abstract void poiSearchInit();// 因为其它搜索结果的处理都是相同的,所以放在父类/** 获取兴趣点信息 */@Overridepublic void onGetPoiResult(PoiResult result) {if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {showToast("没有搜索到结果");return;}poiOverlay.setData(result);// 把数据设置给覆盖物poiOverlay.addToMap();// 把所有的数据的变成覆盖添加到BaiduMappoiOverlay.zoomToSpan();// 把所有的搜索结果在一个屏幕内显示出来}}

package com.itheima.baidumap74;import com.baidu.mapapi.search.route.OnGetRoutePlanResultListener;import com.baidu.mapapi.search.route.RoutePlanSearch;public abstract class RoutePlanSearchBaseActivity extends BaseActivity implements OnGetRoutePlanResultListener {protected RoutePlanSearch routePlanSearch;@Overridepublic void init() {routePlanSearch = RoutePlanSearch.newInstance();routePlanSearch.setOnGetRoutePlanResultListener(this);routePlanSearchInit();}/** 路径搜索初化代码写在这个方法 中*/public abstract void routePlanSearchInit();}

package com.itheima.baidumap74;import com.baidu.mapapi.model.LatLng;import com.baidu.mapapi.model.LatLngBounds;import com.baidu.mapapi.search.poi.PoiBoundSearchOption;import com.baidu.mapapi.search.poi.PoiDetailResult;public class SearchInBoundActivity extends PoiSearchBaseActivity {@Overridepublic void poiSearchInit() {poiSearch.searchInBound(getSearchParams());}private PoiBoundSearchOption getSearchParams() {PoiBoundSearchOption params = new PoiBoundSearchOption();// 指定搜索范围,由一个西南点和一个东北点组成的范围LatLngBounds bounds = new LatLngBounds.Builder().include(new LatLng(40.048459,116.302072)).include(new LatLng(40.050675,116.304317)).build();params.bound(bounds);// 指定搜索范围params.keyword("加油站");// 指定搜索什么内容return params;}/** 获取兴趣点详情信息 */@Overridepublic void onGetPoiDetailResult(PoiDetailResult result) {}}

package com.itheima.baidumap74;import android.view.KeyEvent;import com.baidu.mapapi.search.core.PoiInfo;import com.baidu.mapapi.search.core.SearchResult;import com.baidu.mapapi.search.poi.PoiCitySearchOption;import com.baidu.mapapi.search.poi.PoiDetailResult;import com.baidu.mapapi.search.poi.PoiDetailSearchOption;public class SearchInCityActivity extends PoiSearchBaseActivity {private int pageNum;@Overridepublic void poiSearchInit() {poiSearch.searchInCity(getSearchParams());}@Overridepublic boolean onPoiClick(int index) {// 当点击一个搜索出来的兴趣点的时候,再去搜索更详细的内容PoiInfo poiInfo = poiOverlay.getPoiResult().getAllPoi().get(index);poiSearch.searchPoiDetail(getSearchDetailParams(poiInfo.uid));return true;}private PoiDetailSearchOption getSearchDetailParams(String poiUid) {PoiDetailSearchOption params = new PoiDetailSearchOption();params.poiUid(poiUid);return params;}private PoiCitySearchOption getSearchParams() {PoiCitySearchOption params = new PoiCitySearchOption();params.city("北京");// 指定在哪个城市内进行搜索params.keyword("加油站");// 指定搜索的是什么内容params.pageCapacity(10);// 设置一页获取10条数据params.pageNum(pageNum);// 指定获取哪一页return params;}/** 获取到详情信息的回调方法 */@Overridepublic void onGetPoiDetailResult(PoiDetailResult result) {if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {showToast("没有搜索到详情信息");return ;}showToast(result.getShopHours() + ", " + result.getTelephone());}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_1) {// 获取下一页数据pageNum++;poiSearch.searchInCity(getSearchParams());}return super.onKeyDown(keyCode, event);}}

package com.itheima.baidumap74;import com.baidu.mapapi.search.poi.PoiDetailResult;import com.baidu.mapapi.search.poi.PoiNearbySearchOption;/*** 在周边搜索* **/public class SearchInNearbyActivity extends PoiSearchBaseActivity {@Overridepublic void poiSearchInit() {poiSearch.searchNearby(getSearchParams());}private PoiNearbySearchOption getSearchParams() {PoiNearbySearchOption params = new PoiNearbySearchOption();params.location(hmPos);// 指定在哪个位置搜索params.radius(1000);// 指定搜索范围params.keyword("建设银行");// 指定搜索的内容return params;}/** 获取兴趣点详情信息 */@Overridepublic void onGetPoiDetailResult(PoiDetailResult result) {}}

package com.itheima.baidumap74;import com.baidu.mapapi.map.TextOptions;public class TextOverlayActivity extends BaseActivity {@Overridepublic void init() {TextOptions options = new TextOptions();options.position(hmPos)// 位置.text("黑马程序员")// 文字内容.fontSize(20)// 文字大小.fontColor(0XFF000000)// 文字颜色.bgColor(0X55FF0000)// 背景颜色.rotate(30);// 旋转baiduMap.addOverlay(options);}}

package com.itheima.baidumap74;import java.util.List;import com.baidu.mapapi.overlayutil.TransitRouteOverlay;import com.baidu.mapapi.search.route.DrivingRouteResult;import com.baidu.mapapi.search.route.PlanNode;import com.baidu.mapapi.search.route.TransitRouteLine;import com.baidu.mapapi.search.route.TransitRoutePlanOption;import com.baidu.mapapi.search.route.TransitRoutePlanOption.TransitPolicy;import com.baidu.mapapi.search.route.TransitRouteResult;import com.baidu.mapapi.search.route.WalkingRouteResult;/*** 换乘路线搜索(公交、地铁)* **/public class TransitSearchActivity extends RoutePlanSearchBaseActivity {@Overridepublic void routePlanSearchInit() {routePlanSearch.transitSearch(getSearchParams());}private TransitRoutePlanOption getSearchParams() {TransitRoutePlanOption params = new TransitRoutePlanOption();params.city("北京");// 设置在哪个城市内搜索params.policy(TransitPolicy.EBUS_TIME_FIRST);// 设置策略为:时间优先params.from(PlanNode.withLocation(hmPos));// 设置起点params.to(PlanNode.withLocation(czPos));// 设置终点return params;}/** 获取驾车搜索结果的回调方法 */@Overridepublic void onGetDrivingRouteResult(DrivingRouteResult result) {}/** 获取换乘(公交、地铁)搜索结果的回调方法 */@Overridepublic void onGetTransitRouteResult(TransitRouteResult result) {TransitRouteOverlay overlay = new TransitRouteOverlay(baiduMap);baiduMap.setOnMarkerClickListener(overlay);List<TransitRouteLine> routeLines = result.getRouteLines();// 获取到所有的搜索路线,最优化的路线会在集合的前面overlay.setData(routeLines.get(0));// 把搜索结果设置到覆盖物overlay.addToMap();// 把搜索结果添加到地图overlay.zoomToSpan();// 把搜索结果在一个屏幕内显示完}/** 获取步行搜索结果的回调方法 */@Overridepublic void onGetWalkingRouteResult(WalkingRouteResult result) {}}

package com.itheima.baidumap74;import java.util.List;import com.baidu.mapapi.overlayutil.TransitRouteOverlay;import com.baidu.mapapi.overlayutil.WalkingRouteOverlay;import com.baidu.mapapi.search.route.DrivingRouteResult;import com.baidu.mapapi.search.route.PlanNode;import com.baidu.mapapi.search.route.TransitRouteLine;import com.baidu.mapapi.search.route.TransitRoutePlanOption;import com.baidu.mapapi.search.route.WalkingRouteLine;import com.baidu.mapapi.search.route.TransitRoutePlanOption.TransitPolicy;import com.baidu.mapapi.search.route.TransitRouteResult;import com.baidu.mapapi.search.route.WalkingRoutePlanOption;import com.baidu.mapapi.search.route.WalkingRouteResult;/*** 步行路线搜索* **/public class WalkingSearchActivity extends RoutePlanSearchBaseActivity {@Overridepublic void routePlanSearchInit() {routePlanSearch.walkingSearch(getSearchParams());}private WalkingRoutePlanOption getSearchParams() {WalkingRoutePlanOption params = new WalkingRoutePlanOption();params.from(PlanNode.withLocation(hmPos));// 设置起点params.to(PlanNode.withLocation(czPos));// 设置终点return params;}/** 获取驾车搜索结果的回调方法 */@Overridepublic void onGetDrivingRouteResult(DrivingRouteResult result) {}/** 获取换乘(公交、地铁)搜索结果的回调方法 */@Overridepublic void onGetTransitRouteResult(TransitRouteResult result) {}/** 获取步行搜索结果的回调方法 */@Overridepublic void onGetWalkingRouteResult(WalkingRouteResult result) {WalkingRouteOverlay overlay = new WalkingRouteOverlay(baiduMap);baiduMap.setOnMarkerClickListener(overlay);List<WalkingRouteLine> routeLines = result.getRouteLines();// 获取到所有的搜索路线,最优化的路线会在集合的前面overlay.setData(routeLines.get(0));// 把搜索结果设置到覆盖物overlay.addToMap();// 把搜索结果添加到地图overlay.zoomToSpan();// 把搜索结果在一个屏幕内显示完}}

package com.itheima.baidumap74.util;import android.content.Context;import android.view.Gravity;import android.widget.Toast;public class Utils {/*** 在屏幕中央显示一个Toast* @param text*/public static void showToast(Context context, CharSequence text) {Toast toast = Toast.makeText(context, text, Toast.LENGTH_SHORT);toast.setGravity(Gravity.CENTER, 0, 0);toast.show();}}

<RelativeLayout xmlns:android="/apk/res/android"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".HelloBaiduMapActivity" ><com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" /></RelativeLayout>

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/popupmap"android:gravity="center_vertical" ><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="2dip"android:src="@drawable/round" /><TextViewandroid:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:ellipsize="end"android:text="标题"android:textSize="20sp" /><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/roads" /></LinearLayout>

三、运行中遇到的问题

运行中需要用到key,要去百度地图开发平台申请,并且一个Key只能用于一个应用。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。