项目结构如下:
具体代码如下:
package com.xuliugen.baidumap; import android.app.Activity; import android.os.Bundle; import android.widget.Toast; import com.baidu.mapapi.BMapManager; import com.baidu.mapapi.MKGeneralListener; import com.baidu.mapapi.map.MKEvent; import com.baidu.mapapi.map.MapController; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.search.MKAddrInfo; import com.baidu.mapapi.search.MKBusLineResult; import com.baidu.mapapi.search.MKDrivingRouteResult; import com.baidu.mapapi.search.MKPoiResult; import com.baidu.mapapi.search.MKSearchListener; import com.baidu.mapapi.search.MKShareUrlResult; import com.baidu.mapapi.search.MKSuggestionResult; import com.baidu.mapapi.search.MKTransitRouteResult; import com.baidu.mapapi.search.MKWalkingRouteResult; import com.baidu.platform.comapi.basestruct.GeoPoint; public class BaseActivity extends Activity { protected BMapManager manager; // 地图引擎管理工具 protected MapView mapView; // 地图的展示时控件 protected MapController mapController; // 控制地图的平移、缩放、旋转(MapView和MapController) protected int latitude = (int) (40.051 * 1E6); protected int longitude = (int) (116.303 * 1E6); protected GeoPoint hmGeoPoint = new GeoPoint(latitude, longitude); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); checkKey(); setContentView(R.layout.activity_main); init(); } private void init() { mapView = (MapView) this.findViewById(R.id.ii_mapview); mapView.setBuiltInZoomControls(true); // 添加放大缩小按钮 mapController = mapView.getController(); mapController.setZoom(12); } private void checkKey() { manager = new BMapManager(getApplicationContext()); manager.init(ConstantValue.KEY, new MKGeneralListener() { @Override public void onGetPermissionState(int isError) { if (isError == MKEvent.ERROR_PERMISSION_DENIED) { Toast.makeText(BaseActivity.this, "授权失败", Toast.LENGTH_SHORT).show(); } } @Override public void onGetNetworkState(int isError) { if (isError == MKEvent.ERROR_NETWORK_CONNECT) { Toast.makeText(BaseActivity.this, "网络出错", Toast.LENGTH_SHORT).show(); } } }); } @Override protected void onResume() { mapView.onResume(); super.onResume(); } @Override protected void onPause() { mapView.onPause(); super.onPause(); } @Override protected void onDestroy() { mapView.destroy(); super.onDestroy(); } protected class MyMKSearchListenerAdapter implements MKSearchListener { @Override public void onGetAddrResult(MKAddrInfo result, int iError) { } @Override public void onGetBusDetailResult(MKBusLineResult result, int iError) { } @Override public void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) { } @Override public void onGetPoiDetailSearchResult(int result, int iError) { } @Override public void onGetPoiResult(MKPoiResult result, int type, int iError) { } @Override public void onGetShareUrlResult(MKShareUrlResult result, int iError, int arg2) { } @Override public void onGetSuggestionResult(MKSuggestionResult result, int iError) { } @Override public void onGetTransitRouteResult(MKTransitRouteResult result, int iError) { } @Override public void onGetWalkingRouteResult(MKWalkingRouteResult result, int iError) { } } }
package com.xuliugen.baidumap; public interface ConstantValue { String KEY = "w4fyK6fHcYx9VCjNpsXoVWsR"; }
package com.xuliugen.baidumap; import android.os.Bundle; import android.widget.Toast; import com.baidu.mapapi.map.RouteOverlay; import com.baidu.mapapi.search.MKDrivingRouteResult; import com.baidu.mapapi.search.MKPlanNode; import com.baidu.mapapi.search.MKRoute; import com.baidu.mapapi.search.MKRoutePlan; import com.baidu.mapapi.search.MKSearch; public class DrivingSearchDemo extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected void onResume() { search(); super.onResume(); } private void search() { MKSearch mkSearch = new MKSearch(); mkSearch.init(manager, new MyMKSearchListenerAdapter() { @Override public void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) { if (iError == 0) { if (result != null) { // 获得结果,绘制线的结果:包括驾车、步行 RouteOverlay overlay = new RouteOverlay( DrivingSearchDemo.this, mapView); setData(overlay, result); mapView.getOverlays().add(overlay); mapView.refresh(); super.onGetDrivingRouteResult(result, iError); } } else { Toast.makeText(DrivingSearchDemo.this, "未查询到结果", Toast.LENGTH_SHORT).show(); } } }); // 起点所在城市--搜索的起点--终点所在城市--搜索的终点 ;返回成功为0 否则为-1 MKPlanNode startMkPlanNode = new MKPlanNode(); startMkPlanNode.pt = hmGeoPoint; // 起点所在城市 MKPlanNode endMkPlanNode = new MKPlanNode(); endMkPlanNode.name = "天安门"; //驾车策略 mkSearch.setDrivingPolicy(MKSearch.ECAR_FEE_FIRST); mkSearch.drivingSearch("北京", startMkPlanNode, "北京", endMkPlanNode); /* * 第二种方法 List<MKWpNode> nodes = new ArrayList<MKWpNode>(); MKWpNode node * = new MKWpNode(); node.city = "北京"; node.name = "天安门"; * mkSearch.drivingSearch("北京", startMkPlanNode, "北京", * endMkPlanNode,nodes ); */ } private void setData(RouteOverlay overlay, MKDrivingRouteResult result) { if (result.getNumPlan() > 0) { // 判断返回的结果集中至少有一条数据 MKRoutePlan plan = result.getPlan(0); MKRoute route = plan.getRoute(0); overlay.setData(route); } } }
package com.xuliugen.baidumap; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.widget.Toast; import com.baidu.mapapi.BMapManager; import com.baidu.mapapi.MKGeneralListener; import com.baidu.mapapi.map.Geometry; import com.baidu.mapapi.map.Graphic; import com.baidu.mapapi.map.GraphicsOverlay; import com.baidu.mapapi.map.MKEvent; import com.baidu.mapapi.map.MapController; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.Symbol; import com.baidu.platform.comapi.basestruct.GeoPoint; /* * 在地图上绘制几何图形元素 */ public class GraphicsOverlayDemo extends Activity { private BMapManager manager; // 地图引擎管理工具 private MapView mapView; // 地图的展示时控件 private MapController mapController; // 控制地图的平移、缩放、旋转(MapView和MapController) int latitude = (int) (40.051 * 1E6); int longitude = (int) (116.303 * 1E6); private GeoPoint hmGeoPoint = new GeoPoint(latitude, longitude); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* * 验证key,只有成功才会有数据的显示 */ checkKey(); setContentView(R.layout.activity_graphics); init(); /* * 绘制一个圆 */ draw(); } private void draw() { // 1.定义覆盖物 GraphicsOverlay overlay = new GraphicsOverlay(mapView); // 2.设置覆盖物的数据 setData(overlay); // 3.获取mapView存放覆盖物的集合、添加覆盖物 mapView.getOverlays().add(overlay); // 4.手动刷新界面 mapView.refresh(); } private void setData(GraphicsOverlay overlay) { /* * 定义几何图形:圆心+半径 */ Geometry geometry = new Geometry(); /** * public void setCircle(GeoPoint geoPoint,int radius) 设置图形为圆 参数: * geoPoint - 地理坐标 radius - 圆的半径,单位:米 */ geometry.setCircle(hmGeoPoint, 1000); // 画圆 /* * 定义几何图形的样式:颜色+线条的宽度 */ Symbol symbol = new Symbol(); /** * setSurface * * public void setSurface(Symbol.Color color,int status,int linewidth) * 设置面样式 参数: color - 颜色 status - 填充状态,0表示不填充,1表示填充 linewidth - * 线宽,当填充状态为填充时线宽无意义 */ Symbol.Color color = symbol.new Color(); color.red = 255; color.green = 0; color.blue = 0; color.alpha = 100; symbol.setSurface(color, 1, 0); /* * 设置数据 */ Graphic graphic = new Graphic(geometry, symbol); overlay.setData(graphic); } private void init() { mapView = (MapView) this.findViewById(R.id.ii_mapview2); mapView.setBuiltInZoomControls(true); // 添加放大缩小按钮 // 获取MapController mapController = mapView.getController(); mapController.setZoom(12); } private void checkKey() { manager = new BMapManager(getApplicationContext()); manager.init(ConstantValue.KEY, new MKGeneralListener() { @Override public void onGetPermissionState(int isError) { if (isError == MKEvent.ERROR_PERMISSION_DENIED) { Toast.makeText(GraphicsOverlayDemo.this, "授权失败", Toast.LENGTH_SHORT).show(); } } @Override public void onGetNetworkState(int isError) { if (isError == MKEvent.ERROR_NETWORK_CONNECT) { Toast.makeText(GraphicsOverlayDemo.this, "网络出错", Toast.LENGTH_SHORT).show(); } } }); } @Override protected void onResume() { mapView.onResume(); super.onResume(); } @Override protected void onPause() { mapView.onPause(); super.onPause(); } @Override protected void onDestroy() { mapView.destroy(); super.onDestroy(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }
package com.xuliugen.baidumap; import com.baidu.mapapi.BMapManager; import com.baidu.mapapi.MKGeneralListener; import com.baidu.mapapi.map.MKEvent; import com.baidu.mapapi.map.MapController; import com.baidu.mapapi.map.MapView; import com.baidu.platform.comapi.basestruct.GeoPoint; import com.xuliugen.baidumap.R; import android.os.Bundle; import android.app.Activity; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; public class HelloBaiDuMap extends Activity { private BMapManager manager; // 地图引擎管理工具 private MapView mapView; // 地图的展示时控件 private MapController mapController; // 控制地图的平移、缩放、旋转(MapView和MapController) int latitude = (int) (40.051 * 1E6); int longitude = (int) (116.303 * 1E6); private GeoPoint hmGeoPoint = new GeoPoint(latitude, longitude); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* * 验证key,只有成功才会有数据的显示 */ checkKey(); setContentView(R.layout.activity_main); init(); } private void init() { mapView = (MapView) this.findViewById(R.id.ii_mapview); /** * public void setBuiltInZoomControls(boolean on) 设置是否启用内置的缩放控件。 * 如果启用,MapView将自动显示这些缩放控件。 参数: on - * 内置的缩放控件是否启用。如果是false,用户处理缩放控件在界面上的显示。 */ mapView.setBuiltInZoomControls(true); // 添加放大缩小按钮 // 获取MapController mapController = mapView.getController(); /** * public float setZoom(float zoomLevel) 设置地图的缩放级别。 这个值的取值范围是[3,19]。 参数: * zoomLevel - 缩放级别,取值范围是[3,19] 返回: 新的缩放级别,取值范围[3,19]。 * * --在1.3x之前是[3,18],地图的文件格式不一样(文件的大小大大缩小),新增3D显示 */ mapController.setZoom(12); } private void checkKey() { manager = new BMapManager(getApplicationContext()); manager.init(ConstantValue.KEY, new MKGeneralListener() { /** * 验证授权 */ @Override public void onGetPermissionState(int isError) { if (isError == MKEvent.ERROR_PERMISSION_DENIED) { Toast.makeText(HelloBaiDuMap.this, "授权失败", Toast.LENGTH_SHORT).show(); } } /** * 验证网络 */ @Override public void onGetNetworkState(int isError) { if (isError == MKEvent.ERROR_NETWORK_CONNECT) { Toast.makeText(HelloBaiDuMap.this, "网络出错", Toast.LENGTH_SHORT).show(); } } }); } /** * 现阶段存在的问题,当再次进入的时候,mapview的显示出现问题 * * 解决方法就是重载下边几个方法 */ @Override protected void onResume() { mapView.onResume(); super.onResume(); } @Override protected void onPause() { mapView.onPause(); super.onPause(); } @Override protected void onDestroy() { mapView.destroy(); super.onDestroy(); } /** * 添加事件 */ @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.pingyi: // 平移:打字和动画跑到这个地方 mapController.animateTo(hmGeoPoint); // 如果要设置地图的中心点的话是:mapController.setCenter(arg0); break; case R.id.putongxuanzhaun:// 旋转 // 获取地图的当前角度 int mapRotation = mapView.getMapRotation(); // 增加角度 mapRotation += 30; // 将增加的角度设置给地图 mapController.setRotation(mapRotation); break; case R.id.gaojixuanzhuan:// 旋转:平面内的旋转,旋转30度,将增加好的值设置给地图即可 int mapOverlooking = mapView.getMapOverlooking(); mapOverlooking -= 5; mapController.setOverlooking(mapOverlooking); break; case R.id.fangda: mapController.zoomIn(); // 放大一级 break; case R.id.suoxiao: mapController.zoomOut(); // 缩小一级 break; } return super.onOptionsItemSelected(item); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_hellobaidumap, menu); return true; } }
package com.xuliugen.baidumap; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.TextView; import android.widget.Toast; import com.baidu.mapapi.BMapManager; import com.baidu.mapapi.MKGeneralListener; import com.baidu.mapapi.map.ItemizedOverlay; import com.baidu.mapapi.map.MKEvent; import com.baidu.mapapi.map.MapController; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.OverlayItem; import com.baidu.platform.comapi.basestruct.GeoPoint; /* * 在地图上显示图片的信息 * * 多条目的绘制 */ public class ItemizedOverlayDemo extends Activity { private BMapManager manager; private MapView mapView; private MapController mapController; private View pop; private TextView titleTextView; int latitude = (int) (40.051 * 1E6); int longitude = (int) (116.303 * 1E6); private GeoPoint hmGeoPoint = new GeoPoint(latitude, longitude); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); checkKey(); setContentView(R.layout.activity_main); init(); initPop(); draw(); } /** * 初始化泡泡 */ private void initPop() { pop = View.inflate(this, R.layout.pop, null); titleTextView = (TextView) pop.findViewById(R.id.title); pop.setVisibility(View.INVISIBLE); // 添加到mapview容器中 mapView.addView(pop); } private void draw() { // 装OverlayItem的集合 /* * public ItemizedOverlay(Drawable defaultMarker,MapView mapView) * 创建一个新的ItemizedOverlay 参数: defaultMarker - * item默认显示在地图上的的Drawable,为了正确绘制标记点 * ,需要给它添加边界,例如boundCenterBottom(marker)) */ ItemizedOverlay<OverlayItem> overlay = new ItemizedOverlay<OverlayItem>( this.getResources().getDrawable(R.drawable.eat_logo), mapView) { /** * 处理一个item的点击事件 */ @Override protected boolean onTap(int index) { OverlayItem item = this.getItem(index); String title = item.getTitle(); // Toast.makeText(ItemizedOverlayDemo.this, title, // Toast.LENGTH_SHORT).show(); titleTextView.setText(title); // 更新泡泡的位置:通过使用params于经纬度建立关系 // item.getPoint();// 获得经纬度 MapView.LayoutParams params = new MapView.LayoutParams( MapView.LayoutParams.WRAP_CONTENT, MapView.LayoutParams.WRAP_CONTENT, item.getPoint(), MapView.LayoutParams.BOTTOM_CENTER); mapView.updateViewLayout(pop, params); pop.setVisibility(View.VISIBLE); mapView.refresh(); return super.onTap(index); } }; setData(overlay); mapView.getOverlays().add(overlay); mapView.refresh(); } private void setData(ItemizedOverlay<OverlayItem> overlay) { /** * OverlayItem public OverlayItem(GeoPoint point, String title, String * snippet) * * snippet:片段的简介 */ OverlayItem item = new OverlayItem(hmGeoPoint, "黑马训练营", "不4k不就业"); overlay.addItem(item); item = new OverlayItem(new GeoPoint(latitude + 1000, longitude), "向北", "增加纬度"); overlay.addItem(item); item = new OverlayItem(new GeoPoint(latitude, longitude + 1000), "向东", "增加经度"); overlay.addItem(item); item = new OverlayItem(new GeoPoint(latitude - 1000, longitude - 1000), "向西南", "减少经纬度"); overlay.addItem(item); } private void init() { mapView = (MapView) this.findViewById(R.id.ii_mapview); mapView.setBuiltInZoomControls(true); // 添加放大缩小按钮 mapController = mapView.getController(); mapController.setZoom(12); } private void checkKey() { manager = new BMapManager(getApplicationContext()); manager.init(ConstantValue.KEY, new MKGeneralListener() { @Override public void onGetPermissionState(int isError) { if (isError == MKEvent.ERROR_PERMISSION_DENIED) { Toast.makeText(ItemizedOverlayDemo.this, "授权失败", Toast.LENGTH_SHORT).show(); } } @Override public void onGetNetworkState(int isError) { if (isError == MKEvent.ERROR_NETWORK_CONNECT) { Toast.makeText(ItemizedOverlayDemo.this, "网络出错", Toast.LENGTH_SHORT).show(); } } }); } @Override protected void onResume() { mapView.onResume(); super.onResume(); } @Override protected void onPause() { mapView.onPause(); super.onPause(); } @Override protected void onDestroy() { mapView.destroy(); super.onDestroy(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }
package com.xuliugen.baidumap; import com.baidu.mapapi.BMapManager; import com.baidu.mapapi.MKGeneralListener; import com.baidu.mapapi.map.MKEvent; import com.baidu.mapapi.map.MapController; import com.baidu.mapapi.map.MapView; import com.baidu.platform.comapi.basestruct.GeoPoint; import android.app.Activity; import android.os.Bundle; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Toast; public class LayerDemo extends Activity { private BMapManager manager; // 地图引擎管理工具 private MapView mapView; // 地图的展示时控件 private MapController mapController; // 控制地图的平移、缩放、旋转(MapView和MapController) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* * 验证key,只有成功才会有数据的显示 */ checkKey(); setContentView(R.layout.activity_layerdemo); init(); } private void init() { mapView = (MapView) this.findViewById(R.id.ii_mapview2); mapView.setBuiltInZoomControls(true); // 添加放大缩小按钮 mapController = mapView.getController(); mapController.setZoom(12); } private void checkKey() { manager = new BMapManager(getApplicationContext()); manager.init(ConstantValue.KEY, new MKGeneralListener() { @Override public void onGetPermissionState(int isError) { if (isError == MKEvent.ERROR_PERMISSION_DENIED) { Toast.makeText(LayerDemo.this, "授权失败", Toast.LENGTH_SHORT) .show(); } } @Override public void onGetNetworkState(int isError) { if (isError == MKEvent.ERROR_NETWORK_CONNECT) { Toast.makeText(LayerDemo.this, "网络出错", Toast.LENGTH_SHORT) .show(); } } }); } @Override protected void onResume() { mapView.onResume(); super.onResume(); } @Override protected void onPause() { mapView.onPause(); super.onPause(); } @Override protected void onDestroy() { mapView.destroy(); super.onDestroy(); } /** * 添加事件 */ @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.ditu: // 底图 mapView.setTraffic(false); mapView.setSatellite(false); break; case R.id.shishijiaotong:// 实时交通 mapView.setTraffic(true); mapView.setSatellite(false); break; case R.id.weixingtu:// 卫星图 mapView.setTraffic(false); mapView.setSatellite(true); break; } return super.onOptionsItemSelected(item); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_layerdemo, menu); return true; } }
package com.xuliugen.baidumap; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; /* * 多个demo的启动页面 */ public class MainActivity extends Activity { private static String[] obvject = new String[] { "HelloBaiDuMap", "图层", "几何图形元素", "展示文字", "多条自绘制(带提示框)", "圆形区域搜索", "全城搜索", "驾车路线", "步行路线", "公交换乘", "我的位置" }; private ListView listView; private ArrayAdapter<String> adapter; private static Class[] clazz = new Class[] { HelloBaiDuMap.class, LayerDemo.class, GraphicsOverlayDemo.class, TextOverlayDemo.class, ItemizedOverlayDemo.class, PoiSearchNearbyDemo.class, PoiSearchInCityDemo.class, DrivingSearchDemo.class, WalkingSearchDemo.class, TransitOverlayDemo.class, MyLocationOverlayDemo.class }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.in_door); listView = (ListView) findViewById(R.id.list); adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.item, obvject); listView.setAdapter(adapter); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(getApplicationContext(), clazz[position]); startActivity(intent); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }
package com.xuliugen.baidumap; import android.os.Bundle; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.mapapi.map.LocationData; import com.baidu.mapapi.map.MyLocationOverlay; import com.baidu.platform.comapi.basestruct.GeoPoint; /** * 定位的操作 * */ public class MyLocationOverlayDemo extends BaseActivity { private LocationClient client; private BDLocationListener listener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected void onResume() { Location(); client.start(); super.onResume(); } /** * 比较耗费资源的东西在onresume中实现,在onpause中结束 */ @Override protected void onPause() { client.stop(); super.onPause(); } /* * 定位的功能实现 */ private void Location() { client = new LocationClient(this); listener = new MyBDLocationListener(); // client数据的设置,如:多久、间隔时间发送获取位置的请求等 LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); option.setAddrType("all");// 返回的定位结果包含地址信息 option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02 option.setScanSpan(5000);// 设置发起定位请求的间隔时间为5000ms option.disableCache(true);// 禁止启用缓存定位 option.setPoiNumber(5); // 最多返回POI个数 option.setPoiDistance(1000); // poi查询距离 client.setLocOption(option); client.registerLocationListener(listener); } /* * 自定义的listener实现BDLocationListener接口 */ public class MyBDLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { if (location == null) { return; } location.getLongitude();// 获取经度 location.getLatitude(); // 获取维度 // 定位覆盖物 MyLocationOverlay overlay = new MyLocationOverlay(mapView); LocationData data = new LocationData(); data.latitude = location.getLatitude(); data.longitude = location.getLongitude(); overlay.setData(data); mapView.getOverlays().add(overlay); mapView.refresh(); GeoPoint point = new GeoPoint((int) (data.longitude * 1E6), (int) (data.latitude * 1E6)); // 定位到该点 mapController.animateTo(point); } @Override public void onReceivePoi(BDLocation arg0) { } } }
package com.xuliugen.baidumap; import java.util.ArrayList; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; import com.baidu.mapapi.map.PoiOverlay; import com.baidu.mapapi.search.MKPoiInfo; import com.baidu.mapapi.search.MKPoiResult; import com.baidu.mapapi.search.MKSearch; import com.baidu.mapapi.search.MKSearchListener; /** * 全程范围内的搜索 * * 侧重点是分页的效果 */ public class PoiSearchInCityDemo extends BaseActivity { private MKSearch mkSearch; private MKSearchListener mkSearchListener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected void onResume() { search(); super.onResume(); } private void search() { mkSearch = new MKSearch(); mkSearchListener = new MyMKSearchListenerAdapter() { @Override public void onGetPoiResult(MKPoiResult result, int type, int iError) { if (iError == 0) { if (result != null) { PoiOverlay overlay = new PoiOverlay( PoiSearchInCityDemo.this, mapView); setData(overlay, result); mapView.getOverlays().clear(); // 当粉也较多的时候,没显示下一页做一次清理的工作 mapView.getOverlays().add(overlay); mapView.refresh(); } } else { Toast.makeText(PoiSearchInCityDemo.this, "未查询到结果", Toast.LENGTH_SHORT).show(); } } }; mkSearch.init(manager, mkSearchListener); // 绑定 mkSearch.poiSearchInCity("北京", "加油站");// 全程搜索 } private void setData(PoiOverlay overlay, MKPoiResult result) { // result.getAllPoi(); // 当前页的数据信息,默认的是10条数据 ArrayList<MKPoiInfo> datas = result.getAllPoi(); overlay.setData(datas); // ArrayList<MKPoiInfo> getAllPoi() // // MKCityListInfo getCityListInfo(int index) // 获取第index个城市信息,index从0开始 // int getCityListNum() // 返回城市列表页的结果数 // int getCurrentNumPois() // 获取当前页的poi结果数 // ArrayList<MKPoiResult> getMultiPoiResult() // // int getNumPages() // 获取本次poi搜索的总页数 // int getNumPois() // 获取本次poi搜索的总结果数 // int getPageIndex() // 返回当前页的索引 // MKPoiInfo getPoi(int index) // 获取第index个poi信息 // 当前页/共几页 当前页的条目数:/总条目数: String info = " 当前页:" + result.getPageIndex() + "/共几页:" + result.getNumPages() + " 当前页的条目数:" + result.getCurrentNumPois() + "/总条目数:" + result.getNumPois(); Toast.makeText(PoiSearchInCityDemo.this, info, Toast.LENGTH_SHORT) .show(); } // 当前页 private int currentPage = 0; /** * 添加事件 */ @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.nextpage: // 下一页 // 当前页+1 currentPage++; mkSearch.goToPoiPage(currentPage);// 获取下一页的数据 break; case R.id.prepage: // 上一页 // 当前页+1 currentPage--; mkSearch.goToPoiPage(currentPage);// 获取上一页的数据 break; } return super.onOptionsItemSelected(item); } /** * 自定义菜单 */ @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_poisearchincitydemo, menu); return true; } }
package com.xuliugen.baidumap; import java.util.ArrayList; import android.os.Bundle; import android.view.Menu; import android.widget.Toast; import com.baidu.mapapi.map.PoiOverlay; import com.baidu.mapapi.search.MKPoiInfo; import com.baidu.mapapi.search.MKPoiResult; import com.baidu.mapapi.search.MKSearch; import com.baidu.mapapi.search.MKSearchListener; /** * 兴趣点检索(圆形区域+全城(分页处理)) * * 圆形兴趣点的搜索 * */ public class PoiSearchNearbyDemo extends BaseActivity { private MKSearch mkSearch; private MKSearchListener mkSearchListener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 搜索 search(); } private void search() { mkSearch = new MKSearch(); mkSearchListener = new MyMKSearchListenerAdapter() { /** * 返回的数据 */ @Override public void onGetPoiResult(MKPoiResult result, int type, int iError) { // 处理圆形区域内数据展示 if (iError == 0) { // 成功的情况 if (result != null) { PoiOverlay overlay = new PoiOverlay( PoiSearchNearbyDemo.this, mapView); setDate(overlay, result); // 设置数据 mapView.getOverlays().add(overlay); mapView.refresh(); } } else { Toast.makeText(PoiSearchNearbyDemo.this, "未查询到结果", Toast.LENGTH_SHORT).show(); } super.onGetPoiResult(result, type, iError); } private void setDate(PoiOverlay overlay, MKPoiResult result) { ArrayList<MKPoiInfo> datas = result.getAllPoi(); // 往集合放数据 overlay.setData(datas); } }; mkSearch.init(manager, mkSearchListener); // 建立关系 // 发送搜索请求的信息 mkSearch.poiSearchNearBy("加油站", hmGeoPoint, 1000); // 搜索的内容是什么 } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_layerdemo, menu); return true; } }
package com.xuliugen.baidumap; import android.app.Activity; import android.graphics.Typeface; import android.os.Bundle; import android.view.Menu; import android.widget.Toast; import com.baidu.mapapi.BMapManager; import com.baidu.mapapi.MKGeneralListener; import com.baidu.mapapi.map.MKEvent; import com.baidu.mapapi.map.MapController; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.Symbol; import com.baidu.mapapi.map.Symbol.Color; import com.baidu.mapapi.map.TextItem; import com.baidu.mapapi.map.TextOverlay; import com.baidu.platform.comapi.basestruct.GeoPoint; /* * 在地图上绘制文字 */ public class TextOverlayDemo extends Activity { private BMapManager manager; private MapView mapView; private MapController mapController; int latitude = (int) (40.051 * 1E6); int longitude = (int) (116.303 * 1E6); private GeoPoint hmGeoPoint = new GeoPoint(latitude, longitude); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); checkKey(); setContentView(R.layout.activity_main); init(); draw(); } private void draw() { // 1.绘制文字 TextOverlay overlay = new TextOverlay(mapView); setData(overlay); mapView.getOverlays().add(overlay); mapView.refresh(); } private void setData(TextOverlay overlay) { TextItem item = new TextItem(); // int align // 文字对齐方式 ,为 ALIGN_TOP,ALIGN_CENTER, ALIGN_BOTTOM中的一个值 // static int ALIGN_BOTTOM // 文字对齐参数,下边中点对齐 // static int ALIGN_CENTER // 文字对齐参数,中心对齐 // static int ALIGN_TOP // 文字对齐参数,上边中点对齐 // Symbol.Color bgColor // 文字背景色, 默认为透明 // Symbol.Color fontColor // 文字颜色 // int fontSize // 字号大小 // GeoPoint pt // 文字显示的位置,用经纬度坐标表示 // String text // 要显示的文字内容 // Typeface typeface // 文字字体, android 字体表示,为空则用系统默认字体. item.align = TextItem.ALIGN_CENTER; item.fontColor = getColor(); item.fontSize = 20; item.pt = hmGeoPoint; item.text = "黑马训练营"; item.typeface = Typeface.DEFAULT_BOLD; // 粗体 overlay.addText(item); } private Color getColor() { Symbol symbol = new Symbol(); Symbol.Color color = symbol.new Color(); color.red = 255; color.green = 0; color.blue = 0; color.alpha = 100; return color; } private void init() { mapView = (MapView) this.findViewById(R.id.ii_mapview); mapView.setBuiltInZoomControls(true); // 添加放大缩小按钮 mapController = mapView.getController(); mapController.setZoom(12); } private void checkKey() { manager = new BMapManager(getApplicationContext()); manager.init(ConstantValue.KEY, new MKGeneralListener() { @Override public void onGetPermissionState(int isError) { if (isError == MKEvent.ERROR_PERMISSION_DENIED) { Toast.makeText(TextOverlayDemo.this, "授权失败", Toast.LENGTH_SHORT).show(); } } @Override public void onGetNetworkState(int isError) { if (isError == MKEvent.ERROR_NETWORK_CONNECT) { Toast.makeText(TextOverlayDemo.this, "网络出错", Toast.LENGTH_SHORT).show(); } } }); } @Override protected void onResume() { mapView.onResume(); super.onResume(); } @Override protected void onPause() { mapView.onPause(); super.onPause(); } @Override protected void onDestroy() { mapView.destroy(); super.onDestroy(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }
package com.xuliugen.baidumap; import android.os.Bundle; import android.widget.Toast; import com.baidu.mapapi.map.TransitOverlay; import com.baidu.mapapi.search.MKPlanNode; import com.baidu.mapapi.search.MKSearch; import com.baidu.mapapi.search.MKTransitRoutePlan; import com.baidu.mapapi.search.MKTransitRouteResult; /** * 公交换乘 * */ public class TransitOverlayDemo extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected void onResume() { search(); super.onResume(); } private void search() { MKSearch mkSearch = new MKSearch(); mkSearch.init(manager, new MyMKSearchListenerAdapter() { @Override public void onGetTransitRouteResult(MKTransitRouteResult result, int iError) { if (iError == 0) { if (result != null) { // 公交换乘需要使用的覆盖物不一样的 TransitOverlay overlay = new TransitOverlay( TransitOverlayDemo.this, mapView); setData(overlay, result); mapView.getOverlays().add(overlay); mapView.refresh(); } } else { Toast.makeText(TransitOverlayDemo.this, "未查询到结果", Toast.LENGTH_SHORT).show(); } } }); // 起点所在城市--搜索的起点--终点所在城市--搜索的终点 ;返回成功为0 否则为-1 MKPlanNode start = new MKPlanNode(); start.pt = hmGeoPoint; // 起点所在城市 MKPlanNode end = new MKPlanNode(); end.name = "天安门"; mkSearch.setTransitPolicy(MKSearch.EBUS_WALK_FIRST);// 设置策略 mkSearch.transitSearch("北京", start, end); } protected void setData(TransitOverlay overlay, MKTransitRouteResult result) { if (result.getNumPlan() > 0) { MKTransitRoutePlan data =result.getPlan(0); overlay.setData(data); } } }
package com.xuliugen.baidumap; import android.os.Bundle; import android.widget.Toast; import com.baidu.mapapi.map.RouteOverlay; import com.baidu.mapapi.search.MKPlanNode; import com.baidu.mapapi.search.MKRoute; import com.baidu.mapapi.search.MKRoutePlan; import com.baidu.mapapi.search.MKSearch; import com.baidu.mapapi.search.MKWalkingRouteResult; import com.baidu.platform.comapi.basestruct.GeoPoint; /** * 步行的检索 * */ public class WalkingSearchDemo extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected void onResume() { search(); super.onResume(); } private void search() { MKSearch mkSearch = new MKSearch(); mkSearch.init(manager, new MyMKSearchListenerAdapter() { @Override public void onGetWalkingRouteResult(MKWalkingRouteResult result, int iError) { if (iError == 0) { if (result != null) { RouteOverlay overlay = new RouteOverlay( WalkingSearchDemo.this, mapView); setData(overlay, result); mapView.getOverlays().clear(); // 当粉也较多的时候,没显示下一页做一次清理的工作 mapView.getOverlays().add(overlay); mapView.refresh(); } } else { Toast.makeText(WalkingSearchDemo.this, "未查询到结果", Toast.LENGTH_SHORT).show(); } } }); MKPlanNode start = new MKPlanNode(); start.pt = hmGeoPoint; MKPlanNode end = new MKPlanNode(); end.pt = new GeoPoint(40065796, 116349868); mkSearch.walkingSearch("北京", start, "北京", end); } protected void setData(RouteOverlay overlay, MKWalkingRouteResult result) { if (result.getNumPlan() > 0) { MKRoutePlan plan = result.getPlan(0); MKRoute data = plan.getRoute(0); overlay.setData(data); } } }
资源文件中的内容省略!
完整项目如下:http://download.csdn.net/detail/u010870518/8455285
时间: 2024-10-26 13:40:38