Android 百度地图定位、添加覆盖物()

来源:互联网 发布:windows redstone 编辑:程序博客网 时间:2024/04/30 00:19

百度地图

    百度地图的简单步骤

1.将百度地图引入自己的工程中. eclipse开发

MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);
    mMap.setMapStatus(msu); //让地图的显示距离为500米
2.引入定位功能,
  定位功能
    定位前需要在清单文件里,加一个service
    LocationClient  //定位的一个类,
    LocationClientOption //进行一些定位的设置,需设置给  LocationClient 

    如下::
           //LocationClientOption option = new LocationClientOption();
// option.setCoorType("bd09ll");
/// option.setIsNeedAddress(true); //地址
// option.setOpenGps(true); //开启GPS
// option.setScanSpan(1000); //一秒定次位
// mLocationClient.setLocOption(option); 


    BDLocationListener //注册的一个接口,定义一个类实现
      在实现方法里转成MyLocationData
    //如下::
   // @Override
      public void onReceiveLocation(BDLocation location) {
MyLocationData mLocationData = 
      new MyLocationData.Builder().accuracy(location.getRadius())
                        .latitude(location.getLatitude())//
.longitude(location.getLongitude())//
.build();
mMap.setMyLocationData(mLocationData); //把定位的一些数据


设置给地图


    再这里在判断一下是不是第一次定位,


3.添加覆盖物
  BitmapDescriptor  bit = BitmapDescriptorFactory.fromResource


(R.drawable.ic_launcher);
//给一个添加覆盖物的坐标
LatLng lat =new LatLng(39.963175, 116.400244); 
//覆盖物设置
OverlayOptions option = new MarkerOptions().position(lat).icon


(bit).zIndex(5); 
// 这是自动跳到添加覆盖物的坐标那
MapStatusUpdate  msu =MapStatusUpdateFactory.newLatLng(lat );
//设置给地图
mMap.setMapStatus(msu);
///////////////////
Marker  marker =(Marker) mMap.addOverlay(option); ///添加图层



Eclipse工程配置方法

第一步:在工程里新建libs文件夹,将开发包里的baidumapapi_vX_X_X.jar拷贝到libs根目录下,将libBaiduMapSDK_vX_X_X.so拷贝到libs\armeabi目录下(官网demo里已有这两个文件,如果要集成到自己的工程里,就需要自己添加),拷贝完成后的工程目录如下图所示;

1.JPG


步骤::

第一步:创建并配置工程(具体方法参见工程配置部分的介绍);

第二步:在AndroidManifest中添加开发密钥、所需权限等信息;

(1)在application中添加开发密钥

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

2)添加所需权限

<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" />

第三步,在布局xml文件中添加地图控件;

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


  
主xml布局里只有一个mapview的控件,控制切换,用的是菜单键
 
<menu xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    tools:context="com.xuexue.demo.MainActivity" >    <item        android:id="@+id/action_normal"        android:orderInCategory="100"        android:title="普通地图"        />    <item        android:id="@+id/action_site"        android:orderInCategory="100"        android:title="卫星地图"        />    <item        android:id="@+id/action_traffic"        android:orderInCategory="100"        android:title="实时交通图"        />    <item        android:id="@+id/action_mylocation"        android:orderInCategory="100"        android:title="我的位置"        />    <item        android:id="@+id/action_overlay"        android:orderInCategory="100"        android:title="添加覆盖物"        /></menu>

下面是java代码

package com.xuexue.demo;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.location.LocationClientOption.LocationMode;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.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.map.TextOptions;import com.baidu.mapapi.model.LatLng;import android.support.v7.app.ActionBarActivity;import android.graphics.Color;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.Window;import android.view.WindowManager;import android.widget.Toast;public class MainActivity extends ActionBarActivity {private MapView mMapView;private BaiduMap mMap;private LocationClient mLocationClient;private boolean isEnable;private boolean isFirst=true;private MyBDLocationListener mBDLocationListener;private double mLat;private double mLong;@Overrideprotected void onCreate(Bundle savedInstanceState) {// 去掉标题requestWindowFeature(Window.FEATURE_NO_TITLE);super.onCreate(savedInstanceState);// 在使用SDK各组件之前初始化context信息,传入ApplicationContext// 注意该方法要再setContentView方法之前实现SDKInitializer.initialize(getApplicationContext());setContentView(R.layout.activity_main);// 初始化地图initMapView();// 定位initLocation();}private void initLocation() {mLocationClient = new LocationClient(this);mBDLocationListener = new MyBDLocationListener();mLocationClient.registerLocationListener(mBDLocationListener);// 设置定位的一些参数LocationClientOption option = new LocationClientOption();option.setCoorType("bd09ll");option.setIsNeedAddress(true);option.setOpenGps(true);option.setScanSpan(1000);mLocationClient.setLocOption(option);}private void initMapView() {// 获取地图控件引用mMapView = (MapView) findViewById(R.id.bmapView);mMap = mMapView.getMap();mMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);// 设置初始距离是500米MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);mMap.setMapStatus(msu);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case R.id.action_normal: // 普通地图mMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);break;case R.id.action_site: // 卫星图mMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);break;case R.id.action_traffic: // 实施交通图if (isEnable) {mMap.setTrafficEnabled(false);isEnable = false;} else {mMap.setTrafficEnabled(true);isEnable = true;}break;case R.id.action_mylocation:ToMyLoaction();break;case R.id.action_overlay:OverLay();break;default:break;}return super.onOptionsItemSelected(item);}private void OverLay() {mMap.clear();               //需要覆盖物的Maker  OverLayBitmapDescriptor  bit = BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher);                LatLng lat =new LatLng(39.93923, 116.357428); //给一个添加覆盖物的坐标               //覆盖物设置                 OverlayOptions option = new MarkerOptions().position(lat).icon(bit).zIndex(5);                 MapStatusUpdate  msu =MapStatusUpdateFactory.newLatLng(lat);                    //设置给地图                  mMap.setMapStatus(msu);                   //构建文字Option对象,用于在地图上添加文字                           OverlayOptions option = new TextOptions()                           .bgColor(0xAAFFFF00)                           .fontSize(24)                           .fontColor(0xFFFF00FF)                           .text("我我")                           .rotate(-30)                           .position(lat);                 //在地图上添加该文字对象并显示                  mMap.addOverlay(option); ///添加图层}public class MyBDLocationListener implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {MyLocationData mLocationData = new MyLocationData.Builder()//.accuracy(location.getRadius())//.latitude(location.getLatitude())//.longitude(location.getLongitude())//.build();mMap.setMyLocationData(mLocationData); //把定位的一些数据设置给地图// 设置定位图标//MyLocationConfiguration config = new MyLocationConfiguration(//com.baidu.mapapi.map.MyLocationConfiguration.LocationMode.NORMAL,//true, null);mLat = location.getLatitude();mLong = location.getLongitude();//判断是否第一次定位if (isFirst) {ToMyLoaction();isFirst =false;Toast.makeText(getApplicationContext(), location.getAddrStr(), Toast.LENGTH_SHORT).show();}}}private void ToMyLoaction() {//定位经纬度LatLng lat = new LatLng(mLat,mLong);MapStatusUpdate  msu =MapStatusUpdateFactory.newLatLng(lat );//设置给地图mMap.setMapStatus(msu);}@Overrideprotected void onStart() {super.onStart();mMap.setMyLocationEnabled(true);if (!mLocationClient.isStarted())mLocationClient.start();}@Overrideprotected void onStop() {super.onStop();mMap.setMyLocationEnabled(false);if(mLocationClient.isStarted())mLocationClient.stop();}@Overrideprotected void onResume() {super.onResume();mMapView.onResume();}@Overrideprotected void onPause() {super.onPause();mMapView.onPause();}@Overrideprotected void onDestroy() {super.onDestroy();mMapView.onDestroy();}}













0 0
原创粉丝点击