* 基本地图
public class MapActivity_basic extends Activity { private MapView mapview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_mapbase); mapview = (MapView) findViewById(R.id.mapview); } //将mapview的生命周期跟acitivity的生命周期相绑定。 @Override protected void onResume() { super.onResume(); mapview.onResume(); } @Override protected void onPause() { super.onPause(); mapview.onPause(); } @Override protected void onDestroy() { super.onDestroy(); mapview.onDestroy(); }}
*3D地图
public class MapActivity_base_3D extends Activity { private MapView mapview_3d; private BaiduMap mBaiduMap; private RadioGroup radioGroup; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_mapbase_3d); mapview_3d = (MapView) findViewById(R.id.mapview_base_3d); mBaiduMap = mapview_3d.getMap(); radioGroup = (RadioGroup) findViewById(R.id.rg_map); radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { if(checkedId==R.id.rb_base){ //设置普通地图。 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); }else if(checkedId==R.id.rb_satellife){ //卫星地图 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); }else{ //开启实时交通 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); mBaiduMap.setTrafficEnabled(true); } } }); } @Override protected void onResume() { super.onResume(); mapview_3d.onResume(); } @Override protected void onPause() { super.onPause(); mapview_3d.onPause(); } @Override protected void onDestroy() { super.onDestroy(); mapview_3d.onDestroy(); }}
*覆盖物
public class MapActivity_overlay extends Activity { //113.347003,23.182418 private MapView mapview_overlay; private BaiduMap baiduMap_overlay; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_overlay); mapview_overlay = (MapView) findViewById(R.id.mapview_overlay); baiduMap_overlay = mapview_overlay.getMap(); //坐标 LatLng latLing = new LatLng(23.182418,113.347003); //图片。 BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.mipmap.icon_marka); OverlayOptions overlayOptions = new MarkerOptions().position(latLing).icon(bitmap); //添加覆盖层。--需要坐标位置和图片。 baiduMap_overlay.addOverlay(overlayOptions); // LatLng statusLatting = new LatLng(); //设置地图的中心位置。 //坐标,缩放,缩放的值范围为3-20的浮点数。 MapStatusUpdate mapstatusUpdate = MapStatusUpdateFactory.newLatLngZoom(latLing,17); baiduMap_overlay.setMapStatus(mapstatusUpdate); } @Override protected void onResume() { super.onResume(); mapview_overlay.onResume(); } @Override protected void onPause() { super.onPause(); mapview_overlay.onPause(); } @Override protected void onDestroy() { super.onDestroy(); mapview_overlay.onDestroy(); }}
*定位
public class Activity_location extends Activity implements BDLocationListener{ private MapView mapview_location; private BaiduMap baiduMap; private LocationClient locationClient; private boolean isFirst = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_location); mapview_location = (MapView) findViewById(R.id.mapview_location); baiduMap = mapview_location.getMap(); baiduMap.setMyLocationEnabled(true);//开启定位图层 //创建定位客户端。 locationClient = new LocationClient(this); initLocation(); locationClient.registerLocationListener(this); locationClient.start();//开始定位。 } //配置定位的参数 private void initLocation() { //设置定位功能可用 baiduMap.setMyLocationEnabled(true);// 1、设置定位参数 LocationClientOption option = new LocationClientOption(); //3、option一系列设置 //3.1设置坐标系 option.setCoorType("bd09ll");// 3.2设置定位模式 option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);// 3.3设置开启Gps option.setOpenGps(true);// 3.4设置扫描频率 option.setScanSpan(3 * 1000);// 3.5设置是否接受地址信息 option.setIsNeedAddress(true);// 3.6设置是否需要设备方向 option.setNeedDeviceDirect(true);//返回定位结果包含手机机头方向 //2、使用定位参数 locationClient.setLocOption(option); } @Override protected void onResume() { super.onResume(); mapview_location.onResume(); } @Override protected void onPause() { super.onPause(); mapview_location.onPause(); } @Override protected void onDestroy() { baiduMap.setMyLocationEnabled(false); mapview_location.onDestroy(); mapview_location = null; locationClient.stop(); super.onDestroy(); } @Override public void onReceiveLocation(BDLocation bdLocation) { System.out.println( "收到定位数据"+bdLocation.getAddrStr()+" long = "+bdLocation.getLongitude());// 1、构造定位数据 MyLocationData data = new MyLocationData.Builder() .direction(bdLocation.getDirection())//获取方向 .latitude(bdLocation.getLatitude())//纬度 .longitude(bdLocation.getLongitude())//经度 .accuracy(bdLocation.getRadius())//定位精度 .build();// 2、设置定位数据 baiduMap.setMyLocationData(data);// 3、更新地图中心点// 定位的坐标点 LatLng ll = new LatLng(bdLocation.getLatitude(),bdLocation.getLongitude());// 地图状态更新类 MapStatusUpdate mapSatusUpadate = MapStatusUpdateFactory.newLatLng(ll);// 更新地图状态 baiduMap.animateMapStatus(mapSatusUpadate); }}
*搜索
public class Activity_POI extends Activity implements OnGetPoiSearchResultListener { private MapView mapview_poi; private BaiduMap baiduMap_poi; private PoiSearch poiSearch; private EditText edt_city, edt_key; private Listlist_city; private int totalNum_city; private int pageNum = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_poi); initView(); mapview_poi = (MapView) findViewById(R.id.mapview_poi); baiduMap_poi = mapview_poi.getMap(); //创建对象 poiSearch = PoiSearch.newInstance(); //设置监听器 poiSearch.setOnGetPoiSearchResultListener(this); /* LatLng latLing = new LatLng(23.182418, 113.347003); MapStatusUpdate mapstatus = MapStatusUpdateFactory.newLatLngZoom(latLing, 15); baiduMap_poi.setMapStatus(mapstatus);*/ } private void initView() { edt_city = (EditText) findViewById(R.id.edt_city); edt_key = (EditText) findViewById(R.id.edt_key); } @Override protected void onResume() { super.onResume(); mapview_poi.onResume(); } @Override protected void onPause() { super.onPause(); mapview_poi.onPause(); } @Override protected void onDestroy() { super.onDestroy(); mapview_poi.onDestroy(); poiSearch.destroy(); } //得到检索的结果 @Override public void onGetPoiResult(PoiResult poiResult) { if (poiResult.error == SearchResult.ERRORNO.NO_ERROR) { //清除地图的覆盖物 baiduMap_poi.clear(); //创建。 // PoiInfo poiInfo = poiResult.getAllPoi().get(0); list_city = poiResult.getAllPoi(); totalNum_city = poiResult.getTotalPageNum(); MyPoiOverLay poiOverLay = new MyPoiOverLay(baiduMap_poi); baiduMap_poi.setOnMarkerClickListener(poiOverLay); poiOverLay.setData(poiResult); poiOverLay.addToMap();//添加到map上。 poiOverLay.zoomToSpan();//缩放 /* for (PoiInfo poi : list_city) { LatLng latlng = poi.location; System.out.println(poi.address + ":" + poi.name); BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.mipmap.icon_marka); OverlayOptions options = new MarkerOptions().icon(bitmap).position(latlng); baiduMap_poi.addOverlay(options); }*/ } if (poiResult == null || poiResult.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) { System.out.println(poiResult.error.toString()); Toast.makeText(Activity_POI.this, "未找到结果", Toast.LENGTH_LONG) .show(); return; } } //检索结果的详情页 @Override public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) { if (poiDetailResult != null) { Toast.makeText(this, poiDetailResult.getAddress() + ":" + poiDetailResult.getName(), Toast.LENGTH_SHORT).show(); } } //按钮的点击事件。 public void click(View view) { String city = edt_city.getText().toString();//获得城市 String key = edt_key.getText().toString();//获得关键字。 switch (view.getId()) { case R.id.btn_search_city: searchInCitys(city, key, 0); break; case R.id.btn_bound: break; case R.id.btn_nearby: break; case R.id.btn_next: pageNum++; if (pageNum > totalNum_city) { pageNum = 0; } //搜索 searchInCitys(city, key, pageNum); break; } } //城市内搜索的方法。以方便调用。 public void searchInCitys(String city, String key, int pageNum) { //先创建 PoiCitySearchOption options = new PoiCitySearchOption(); //设置属性。 options.city(city); options.keyword(key); options.pageNum(pageNum); poiSearch.searchInCity(options); } //周边搜索 public void searchInNearBy(String key) { PoiNearbySearchOption options = new PoiNearbySearchOption(); options.keyword(key);//设置关键字 // options.location();//设置中心坐标 // options.radius();//设置半径 poiSearch.searchNearby(options); } public void searchInBound(String key){ PoiBoundSearchOption options = null; options = new PoiBoundSearchOption(); options.keyword(key); LatLngBounds.Builder builder = null; builder = new LatLngBounds.Builder(); // builder.include(new LatLng()); // builder.include(new LatLng()); LatLngBounds bounds = builder.build(); options.bound(bounds); poiSearch.searchInBound(options); } class MyPoiOverLay extends PoiOverlay { /** * 构造函数 * * @param baiduMap 该 PoiOverlay 引用的 BaiduMap 对象 */ public MyPoiOverLay(BaiduMap baiduMap) { super(baiduMap); } //点击某个热点的时候毁掉 @Override public boolean onPoiClick(int i) { PoiInfo poiInfo = list_city.get(i); poiSearch.searchPoiDetail(new PoiDetailSearchOption().poiUid(poiInfo.uid)); return true; } }}
*MainActivity
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click(View view){ switch (view.getId()){ case R.id.btn_basicMap: Intent intent_basic = new Intent(this,MapActivity_basic.class); startActivity(intent_basic); break; case R.id.btn_basic_3d: Intent intent_basic_3d = new Intent(this,MapActivity_base_3D.class); startActivity(intent_basic_3d); break; case R.id.btn_basic_overlay: Intent intent_overlay = new Intent(this,MapActivity_overlay.class); startActivity(intent_overlay); break; case R.id.btn_basic_location: Intent intent_location = new Intent(this,Activity_location.class); startActivity(intent_location); break; case R.id.btn_basic_poi: Intent intent_poi = new Intent(this,Activity_POI.class); startActivity(intent_poi); break; } }}