Days26 百度地图(一)

(一)配置环境步骤:
官网帮助:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/hellobaidumap
1、新建工程
2、往libs里导包
3、在application中添加开发密钥

<application>  
    <meta-data  
        android:name="com.baidu.lbsapi.API_KEY"  
        android:value="开发者 key" />  
</application>

value为在百度开发平台上输入SHA1和报名后获得的密钥
获取SHA1步骤:
a、eclipse下:
windows–preference–android–build
b、studio下
terminal—->cd 到debug.keystore文件目录下(如果studio不在
c盘,从安装目录转不到此文件目录,此时可以在dos下cd到此目录)–>输入keytool命令(keytool -list -v -keystore debug.keystore)–>输入口令:android(只管输入,不显示)–>找到SHA1
注意:
(1)把项目下的debug.keyStore删除,两个勾取消
(2)build.gradle下的singingConfigs注掉(在SdkVersion下面)
包名:
为Manifes下的package值
4、添加权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS" />

5、在布局xml文件中添加地图控件;

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

6、在应用程序创建时初始化 SDK引用的Context 全局变量:

public class MainActivity extends Activity {  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);   
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
        //注意该方法要再setContentView方法之前实现  
        SDKInitializer.initialize(getApplicationContext());  
        setContentView(R.layout.activity_main);  
    }  
}

注意:在SDK各功能组件使用之前都需要调用
SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中**
(1)写一个MapDataApp类继承Application,
在onCreate方法里写该方法

public class MapDataApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        // 在使用SDK各组件之前初始化context信息,传入ApplicationContext
        // 注意该方法要再setContentView方法之前实现
        SDKInitializer.initialize(getApplicationContext());
    }

}

(2)给Manifest文件下的application添加name属性

 <application
        android:name="com.sign.days26baidumapwork.MapDataApp"

备注:
所用到的类:
(1)MapView 一个显示地图的视图(View)。它负责从服务端获取地图数据。它将会捕捉屏幕触控手势事件。 使用这个类必须按照它的生命周期进行操控,你必须参照以下方法onCreate(Bundle)、 onResume()、onPause()、onDestroy()。等声明周期函数。在使用地图组件之前请确保已经调用了 SDKInitializer.initialize(Context) 函数以提供全局 Context 信息。
(2)BaiduMap 定义 BaiduMap 地图对象的操作方法与接口
(3)MapStatus 定义地图状态 如(overlook 俯视角度;zoom 缩放倍距; rotate 旋转角度)
(4)BaiduMapOptions MapView初始化选项
(5)SupportMapFragment 管理地图生命周期 方法: newInstance(BaiduMapOptions options)根据给定的百度地图选项创建一个SupportMapFragment 实例
(6)
MapStatusUpdate 描述地图状态将要发生的变化
MapStatusUpdateFactory 生成地图状态将要发生的变化
MapStatusUpdate latlng = MapStatusUpdateFactory.newLatLng(ll);
fm.getBaiduMap().setMapStatus(latlng);
(7)OverlayOptions 地图覆盖物选型基类
Direct Known Subclasses:
ArcOptions, CircleOptions, DotOptions, GroundOverlayOptions, MarkerOptions, PolygonOptions, PolylineOptions, TextOptions
用于在地图上添加覆盖物,并设置覆盖物的相关属性
(8)class Stroke 边框类,可以给圆、多边形设置一个边框
构造函数 int strokeWidth 边框的宽度, 单位:像素, int color 边框的颜色
(9)infoWindow 在地图中显示一个信息窗口,可以设置一个View作为该窗口的内容,也可以设置一个 BitmapDescriptor 作为该窗口的内容。
构造方法参数:view - InfoWindow 展示的 view;position - InfoWindow 显示的地理位置;yOffset - InfoWindow Y 轴偏移量(方向 +向下,-向上)
(二)设置WelcomeActivity
开始界面显示一个ListView,通过点击ListView的条目,跳转到不同的Activity

public class WelcomeActivity extends Activity {

    private ListView lvShow = null;

    private BaiduDemo[] baiduDemos = new BaiduDemo[] {
            new BaiduDemo("sdk Demo", MainActivity.class),
            new BaiduDemo("fragmentMap", FragmentMapActivity.class),
            new BaiduDemo("multimap",MultiMapActivity.class),
            new BaiduDemo("overlay",OverlayActivity.class)};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);

        initView();

        setListener();

        MyAdapter adapter = new MyAdapter();

        lvShow.setAdapter(adapter);
    }

    private void setListener() {
        lvShow.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                Intent intent = new Intent();
                intent.setClass(WelcomeActivity.this, baiduDemos[position].cls);

                startActivity(intent);
            }
        });
    }

    private void initView() {
        lvShow = (ListView) findViewById(R.id.lvShow);
    }

    class MyAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return baiduDemos.length;
        }

        @Override
        public Object getItem(int position) {
            return baiduDemos[position];
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            convertView = LayoutInflater.from(WelcomeActivity.this).inflate(
                    R.layout.list_item, parent, false);

            TextView txtTitle = (TextView) convertView
                    .findViewById(R.id.txtTitle);

            txtTitle.setText(baiduDemos[position].title);

            return convertView;
        }
    }

    class BaiduDemo {
        String title;
        Class<? extends Activity> cls;

        public BaiduDemo(String title, Class<? extends Activity> cls) {
            super();
            this.title = title;
            this.cls = cls;
        }
    }

}

(三)基础地图

public class MainActivity extends Activity {

    MapView mMapView = null;
    private BaiduMap mBaiduMap = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 在使用SDK各组件之前初始化context信息,传入ApplicationContext
        // 注意该方法要再setContentView方法之前实现
        // SDKInitializer.initialize(getApplicationContext());

        setContentView(R.layout.activity_main);

        // 获取地图控件引用
        mMapView = (MapView) findViewById(R.id.bmapView);

        mBaiduMap = mMapView.getMap();

        // 普通地图
         mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);

        // 卫星地图
        // mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);

        // 空白地图,基础地图瓦片将不会被渲染。在地图类型中设置为NONE,将不会使用流量下载基础地图瓦片图层。
        // 使用场景:与瓦片图层一起使用,节省流量,提升自定义瓦片图下载速度。
//      mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NONE);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
        mMapView.onDestroy();
    }

    @Override
    protected void onResume() {
        super.onResume();
        // 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
        mMapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        // 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
        mMapView.onPause();
    }

}

(四)FragmentMapActivity

public class FragmentMapActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fragment_map);

        FragmentManager manager = getSupportFragmentManager();

//      MapStatus  定义地图的状态,overlook 俯视角度;zoom 缩放倍距; rotate 旋转角度
        MapStatus status = new MapStatus.Builder().overlook(45).zoom(21)
                .rotate(0).build();

//      BaiduMapOptions  MapView初始化选项
        BaiduMapOptions options = new BaiduMapOptions().mapStatus(status);

//      通过BaiduMapOptions获得一个SupportMapFragment对象
        Fragment fragment = SupportMapFragment.newInstance(options);

        manager.beginTransaction().add(R.id.rl,fragment).commit();
    }
}

(五)多地图展示

public class MultiMapActivity extends FragmentActivity {

    // LatLng地理坐标基本数据结构
    private static final LatLng GEO_BEIJING = new LatLng(39.945, 116.404);
    private static final LatLng GEO_SHANGHAI = new LatLng(31.227, 121.481);
    private static final LatLng GEO_XIAN = new LatLng(34.2656790000,
            108.9534590000);
    private static final LatLng GEO_SHENGZHENG = new LatLng(22.560, 114.064);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_multi_map);

        initView();
    }

    private void initView() {
        FragmentManager manager = getSupportFragmentManager();

        // SupportMapFragment fmBeijing = (SupportMapFragment)
        // manager.findFragmentById(R.id.fmBeijing);
        //
        // MapStatusUpdate latlngBeijing =
        // MapStatusUpdateFactory.newLatLng(GEO_BEIJING);
        //
        // fmBeijing.getBaiduMap().setMapStatus(latlngBeijing);
        setMapView(manager,R.id.fmBeijing,GEO_BEIJING);
        setMapView(manager,R.id.fmShanghai,GEO_SHANGHAI);
        setMapView(manager,R.id.fmShenzhen,GEO_SHENGZHENG);
        setMapView(manager,R.id.fmXian,GEO_XIAN);
    }

    private void setMapView(FragmentManager manager, int resId, LatLng ll) {
        SupportMapFragment fm = (SupportMapFragment) manager
                .findFragmentById(resId);

//      Class MapStatusUpdate  描述地图状态将要发生的变化
//      MapStatusUpdateFactory  生成地图状态将要发生的变化
        MapStatusUpdate latlng = MapStatusUpdateFactory.newLatLng(ll);

        fm.getBaiduMap().setMapStatus(latlng);
    }

}

(六)添加文字覆盖物、多边形覆盖物、标注覆盖物、弹出窗覆盖物

public class OverlayActivity extends Activity {

    private MapView mvMap = null;
    private BaiduMap baiduMap = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_overlay);

        mvMap = (MapView) findViewById(R.id.mvMap);

        baiduMap = mvMap.getMap();

        // 添加文字覆盖物
        // addText();

        // 添加多边形覆盖物
        // addPolygon();

        // 设置标记
        // addMarker();

        // 设置弹出窗覆盖物
        addInfoWindow();
    }

    private void addInfoWindow() {
        // 创建InfoWindow展示的View
        Button btn = new Button(this);

        btn.setBackgroundColor(Color.BLUE);
        btn.setText("我爱北京天安门");

//      通过传入的 view 构造一个 InfoWindow, 此时只是利用该view生成一个Bitmap绘制在地图中
        /**
         * Parameters:
         * view - InfoWindow 展示的 view
         * position - InfoWindow 显示的地理位置
         * yOffset - InfoWindow Y 轴偏移量(方向  +向下,-向上)
         */
        InfoWindow infoWindow = new InfoWindow(btn, new LatLng(39.9149390000,
                116.4042620000), 100);

        baiduMap.showInfoWindow(infoWindow);
    }

    private void addMarker() {
        MarkerOptions markerOptions = new MarkerOptions();

        ArrayList<BitmapDescriptor> list = new ArrayList<BitmapDescriptor>();
        list.add(BitmapDescriptorFactory.fromResource(R.drawable.bbs_icon_0));
        list.add(BitmapDescriptorFactory.fromResource(R.drawable.bbs_icon_1));
        list.add(BitmapDescriptorFactory.fromResource(R.drawable.bbs_icon_2));
        list.add(BitmapDescriptorFactory.fromResource(R.drawable.bbs_icon_3));
        list.add(BitmapDescriptorFactory.fromResource(R.drawable.bbs_icon_4));
        list.add(BitmapDescriptorFactory.fromResource(R.drawable.bbs_icon_5));
        list.add(BitmapDescriptorFactory.fromResource(R.drawable.bbs_icon_6));

        markerOptions.position(new LatLng(39.945, 116.404)).icons(list);
        baiduMap.addOverlay(markerOptions);
    }

    private void addPolygon() {
        List<LatLng> pts = new ArrayList<LatLng>();
        // 定义多边形的五个顶点
        LatLng pt1 = new LatLng(39.93923, 116.357428);
        LatLng pt2 = new LatLng(39.91923, 116.327428);
        LatLng pt3 = new LatLng(39.89923, 116.347428);
        LatLng pt4 = new LatLng(39.89923, 116.367428);
        LatLng pt5 = new LatLng(39.91923, 116.387428);

        pts.add(pt1);
        pts.add(pt2);
        pts.add(pt3);
        pts.add(pt4);
        pts.add(pt5);

        // 构建用户绘制多边形的option对象
        /**
         * class Stroke 边框类,可以给圆、多边形设置一个边框 构造函数 int strokeWidth 边框的宽度, 单位:像素,
         * int color 边框的颜色
         */
        OverlayOptions polygonOptions = new PolygonOptions().points(pts)
                .fillColor(0xAAFFFF00).stroke(new Stroke(5, 0xAA00FF00));

        baiduMap.addOverlay(polygonOptions);
    }

    private void addText() {
        // 自定义文字所显示的坐标点
        LatLng llText = new LatLng(39.9306540000, 116.3925480000);

        // 构建文字option对象,用于在地图上添加文字,并设置文字背景色、字体大小、字体颜色、文本、旋转角度、显示位置
        OverlayOptions textOption = new TextOptions()
                .bgColor(Color.rgb(100, 100, 100)).fontSize(26)
                .fontColor(0xFFFF00FF).text("百度地图SDK").rotate(0)
                .position(llText);
        // 在地图上添加文字对象并显示
        baiduMap.addOverlay(textOption);

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值