百度地图

<com.baidu.mapapi.map.MapView
        android:id="@+id/XXX"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clickable="true"
        ></com.baidu.mapapi.map.MapView>

 * 基本地图

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 List<PoiInfo> list_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;
        }
    }
}

 

原文地址:https://www.cnblogs.com/anni-qianqian/p/5436359.html