百度地图的简单应用

“`ruby
package com.huawei.mybaidu;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.Toast;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.DotOptions;
import com.baidu.mapapi.map.GroundOverlayOptions;
import com.baidu.mapapi.map.InfoWindow;
import com.baidu.mapapi.map.ItemizedOverlay;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.model.LatLngBounds;
import com.baidu.mapapi.model.inner.GeoPoint;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
// private BMapManager mapManager;
private MapView bmapsView;
private BaiduMap mBaiduMap;
private boolean flag = false;
private String provider;
private LocationManager manger;
private Button saltelite;
private Button general;
private Button traffic_map_btn;
private Button heat_map_btn;
private BDLocation location;
private LocationClient mLocationClient;
private BitmapDescriptor mCurrentMarker,bdGround;
private Button locationbt,overlay_btn;
private Marker mMarkerA ;
private Marker mMarkerB ;
private Marker mMarkerC ;
// 初始化全局 bitmap 信息,不用时及时 recycle
BitmapDescriptor bdA = null;
BitmapDescriptor bdB = null;
BitmapDescriptor bdC = null;
BitmapDescriptor bd = null;
// private Button sateliteMap,generalMap;
// private BaiduMap mBaiduMap;
private Drawable drawable;
private ArrayList mOverlayList = new ArrayList();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
init();
initOverlay();
//这个是百度地图的覆盖物监听事件
mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
public boolean onMarkerClick(final Marker marker) {
Button button = new Button(getApplicationContext());
button.setBackgroundResource(R.drawable.loca);
InfoWindow.OnInfoWindowClickListener listener = null;
if (marker == mMarkerA) {
Toast.makeText(MainActivity.this, “点击成功”,Toast.LENGTH_LONG).show();
} else if (marker == mMarkerB) {
Toast.makeText(MainActivity.this, “拖拽结束,新位置:”, Toast.LENGTH_LONG).show();

            } else if (marker == mMarkerC) {

                Toast.makeText(MainActivity.this, "拖拽结束,新位置:", Toast.LENGTH_LONG).show();

            }
            return true;
        }
    });
}
/**
 * 初始化方法
 */
private void init() {
    bdGround = BitmapDescriptorFactory
            .fromResource(R.drawable.icon_mapgeo);
    // 初始化全局 bitmap 信息,不用时及时 recycle
    bdA = BitmapDescriptorFactory.fromResource(R.drawable.add);
    bdB = BitmapDescriptorFactory.fromResource(R.drawable.add);
    bdC = BitmapDescriptorFactory.fromResource(R.drawable.add);


   drawable = this.getResources().getDrawable(R.drawable.add);
    manger = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);;
    // 获取位置
    location = new BDLocation();


    bmapsView = (MapView) findViewById(R.id.bmapview);
    saltelite = (Button) findViewById(R.id.saltelite);
    heat_map_btn = (Button) findViewById(R.id.heat_map_btn);
    traffic_map_btn = (Button) findViewById(R.id.traffic_map_btn);
    overlay_btn = (Button) findViewById(R.id.overlay_btn);
    locationbt = (Button) findViewById(R.id.locationbt);
    mLocationClient = new LocationClient(getApplicationContext());
    mLocationClient.registerLocationListener(new MyLocationListener());

    mBaiduMap = bmapsView.getMap();
    saltelite.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
        }
    });
    general = (Button) findViewById(R.id.general);
    general.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
        }
    });
    traffic_map_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (!flag) {
                //开启交通图
                mBaiduMap.setTrafficEnabled(true);
                flag = true;
            }else {
                mBaiduMap.setTrafficEnabled(false);
                flag = false;
            }
        }
    });
    heat_map_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (!flag) {
                //开启交通图
                mBaiduMap.setBaiduHeatMapEnabled(true);
                flag = true;
            }else {
                mBaiduMap.setBaiduHeatMapEnabled(false);
                flag = false;
            }

        }
    });
    locationbt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            initMapLocation();
            setMapLocFollow();

// // 开启定位图层
// LatLng point3 = new LatLng(33.99444722222222, 118.17191944444444);
// LatLng point4 = new LatLng(33.96950277777778, 118.17419722222222);
// LatLng point5 = new LatLng(33.97700555555556, 118.15641944444444);
// LatLng point6 = new LatLng(33.973, 118.14905277777778);
// LatLng point7 = new LatLng(33.996719444444444, 118.16251944444444);
// LatLng point8 = new LatLng(33.997883333333334, 118.14164444444444);
//
//
// BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_mapgeo);
// OverlayOptions options = new MarkerOptions().position(point3)
// .icon(bitmap);
// mBaiduMap.addOverlay(options);
// // 开启定位图层
// mBaiduMap.setMyLocationEnabled(true);
// //画起始点
// mapAddDotItem(point3, Color.RED, 11);
// mapAddDotItem(point4, Color.RED, 11);
// mapAddDotItem(point5, Color.RED, 11);
// mapAddDotItem(point6, Color.RED, 11);
// mapAddDotItem(point7, Color.RED, 11);
// mapAddDotItem(point8, Color.RED, 11);

        }
    });
    overlay_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

// LatLng point3 = new LatLng(33.99444722222222, 118.17191944444444);
// LatLng point4 = new LatLng(33.96950277777778, 118.17419722222222);
// LatLng point5 = new LatLng(33.97700555555556, 118.15641944444444);
// LatLng point6 = new LatLng(33.973, 118.14905277777778);
// LatLng point7 = new LatLng(33.996719444444444, 118.16251944444444);
LatLng point8 = new LatLng(33.997883333333334, 118.14164444444444);
//画起始点
mapAddDotItem(point8, Color.RED, 11);
}
});

}
public class MyLocationListener implements BDLocationListener{

    @Override
    public void onReceiveLocation(BDLocation bdLocation) {
        if (location.getLocType()==BDLocation.TypeGpsLocation||location.getLocType()==BDLocation.TypeNetWorkLocation){
            navigate(bdLocation);
        }
    }


    @Override
    public void onConnectHotSpotMessage(String s, int i) {

    }
}

private void navigate(BDLocation bdLocation) {
   LatLng  ll = new LatLng(location.getLatitude(),location.getAltitude());
    MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);
    mBaiduMap.animateMapStatus(update);
    update = MapStatusUpdateFactory.zoomTo(16f);
    mBaiduMap.animateMapStatus(update);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
    bmapsView.onDestroy();
}
@Override
protected void onResume() {
    super.onResume();
    //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
    bmapsView.onResume();
}
@Override
protected void onPause() {
    super.onPause();
    //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
    bmapsView.onPause();
}
private void getProvider(){
    // 构建位置查询条件
    Criteria criteria = new Criteria();
    // 查询精度:高
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    // 是否查询海拨:否
    criteria.setAltitudeRequired(false);
    // 是否查询方位角:否
    criteria.setBearingRequired(false);
    // 是否允许付费:是
    criteria.setCostAllowed(true);
    // 电量要求:低
    criteria.setPowerRequirement(Criteria.POWER_LOW);
    // 返回最合适的符合条件的provider,第2个参数为true说明,如果只有一个provider是有效的,则返回当前provider
    provider = manger.getBestProvider(criteria,true);
}

class OverlayItem{
    public GeoPoint geoPoint1;
    public double mLat1;//纬度
    public double mLon1 ;//经度

    public OverlayItem(GeoPoint geoPoint1, double mLat1, double mLon1) {
        this.geoPoint1 = geoPoint1;
        this.mLon1 = mLon1;
        this.mLat1 = mLat1;
    }

    public GeoPoint getPoints() {
        return geoPoint1;
    }

    public void setPoints(GeoPoint geoPoint1) {
        this.geoPoint1 = geoPoint1;
    }

    public double getmLat1() {
        return mLat1;
    }

    public void setmLat1(double mLat1) {
        this.mLat1 = mLat1;
    }

    public double getmLon1() {
        return mLon1;
    }

    public void setmLon1(double mLon1) {
        this.mLon1 = mLon1;
    }

}

// final class MyOverlayItem extends ItemizedOverlay {
//
// /*覆盖物列表集合/
// private ArrayList mOverlayList = new ArrayList();
//
// // 声明double类型的变量存储北京天安门的纬度、经度值
// private double mLat1 = 39.915; // point1纬度
//
// private double mLon1 = 116.404; // point1经度
//
// // 传进来的Drawable对象用于在地图上标注一个地理坐标点
// public MyOverlayItem(Drawable drawable) {
// super(drawable);
//
// // 将GPS纬度经度值转换成以微度的整数形式存储的地理坐标点
//
// /* 注:GeoPoint对象构造方法的参数列表:第一个是参数表示纬度,第二个是经度
// (我们平时都是经纬度这么叫的,想着应该是经度在前的,呵呵。)
// 在网上查了下,GPS的值官方给的就是纬度经度,也就是说纬度是在前的,以前一直没太注意。*/
// GeoPoint geoPoint1 = new GeoPoint((int) (mLat1 * 1E6), (int) (mLon1 * 1E6));
//
// // 构造OverlayItem对象并添加到mOverlayList集合里
// mOverlayList.add(new OverlayItem(geoPoint1, mLat1, mLon1));
//
// /*
// * 官方的解释:在一个新ItemizedOverlay上执行所有操作的工具方法。
// * 没搞明白啥意思,但是必须的调用这个方法,否则程序运行报错*/
// populate();
// }
//
// /*
// * 返回的是从指定List集合中,取出的一个OverlayItem对象。
// * mOverlayList集合里一旦有了数据,在调用其之前,
// * 一定的在MyOverlayItem的构造函数里调用这个方法populate();
// */
// @Override
// protected OverlayItem createItem(int index) {
// return mOverlayList.get(index);
// }
//
// @Override
// public int size() {
// return mOverlayList.size();
// }
//
// }

/**
 * 定位图层初始化
 */
public void initMapLocation() {
    //三种定位模式,跟随,普通,icon_base_compass,LocationMode.FOLLOWING, LocationMode.NORMAL,LocationMode.COMPASS;
    MyLocationConfiguration.LocationMode mCurrentMode = MyLocationConfiguration.LocationMode.NORMAL;

    // 修改为自定义marker,设置定位自定义图标
    mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.icon_mapgeo);
    mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(mCurrentMode, true, null));//null为使用百度地图默认图案

    // 开启定位图层
    mBaiduMap.setMyLocationEnabled(true);

}

/**
 * 自己封装,百度地图画点函数
 */
public void mapAddDotItem(LatLng lat, int color, int radius) {
    //画点
    LatLng llDot = new LatLng(lat.latitude, lat.longitude);
    OverlayOptions ooDot = new DotOptions().center(llDot).radius(radius)
            .color(color);
    mBaiduMap.addOverlay(ooDot);
}

private void setMapLocFollow() {
    //设定中心点坐标
    LatLng cenpt =  new LatLng(33.983626,118.163161);

//定义地图状态
MapStatus mMapStatus = new MapStatus.Builder()
//要移动的点
.target(cenpt)
//放大地图到20倍
.zoom(13)
.build();
//定义MapStatusUpdate对象,以便描述地图状态将要发生的变化

    MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);

//改变地图状态
mBaiduMap.setMapStatus(mMapStatusUpdate);
}

public void initOverlay() {
    // 添加覆盖物的坐标
    LatLng llA = new LatLng(36.05, 103.83);
    LatLng llB = new LatLng(36.15, 103.78);
    LatLng llC = new LatLng(36.20, 103.65);
    LatLng llD = new LatLng(36.25, 103.32);

    OverlayOptions ooA = new MarkerOptions().position(llA).icon(bdA)
            .zIndex(9).draggable(true);
    mMarkerA = (Marker) (mBaiduMap.addOverlay(ooA));
    OverlayOptions ooB = new MarkerOptions().position(llB).icon(bdB)
            .zIndex(5);
    mMarkerB = (Marker) (mBaiduMap.addOverlay(ooB));
    OverlayOptions ooC = new MarkerOptions().position(llC).icon(bdC)
            .perspective(false).anchor(0.5f, 0.5f).rotate(30).zIndex(7);
    mMarkerC = (Marker) (mBaiduMap.addOverlay(ooC));
    // ArrayList<BitmapDescriptor> giflist = new
    // ArrayList<BitmapDescriptor>();
    // giflist.add(bdA);
    // giflist.add(bdB);
    // giflist.add(bdC);
    // OverlayOptions ooD = new MarkerOptions().position(llD).icons(giflist)
    // .zIndex(0).period(10);
    // mMarkerD = (Marker) (mBaiduMap.addOverlay(ooD));

// // 添加弹出窗覆盖物的区域
// LatLng southwest = new LatLng(36.05, 103.83);
// LatLng northeast = new LatLng(36.20, 103.65);
// LatLngBounds bounds = new LatLngBounds.Builder().include(northeast)
// .include(southwest).build();
//
// OverlayOptions ooGround = new GroundOverlayOptions()
// .positionFromBounds(bounds).image(bdGround).transparency(0.8f);
// mBaiduMap.addOverlay(ooGround);
// //
// // MapStatusUpdate u = MapStatusUpdateFactory
// // .newLatLng(bounds.getCenter());
// // mBaiduMap.setMapStatus(u);
//
// mBaiduMap.setOnMarkerDragListener(new BaiduMap.OnMarkerDragListener() {
// public void onMarkerDrag(Marker marker) {
// }
//
// public void onMarkerDragEnd(Marker marker) {
// Toast.makeText(
// MainActivity.this,
// “拖拽结束,新位置:” + marker.getPosition().latitude + “, ”
// + marker.getPosition().longitude,
// Toast.LENGTH_LONG).show();
// }
//
// public void onMarkerDragStart(Marker marker) {
// }
// });
}
}

posted @   飞航之梦  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示