您的位置:首页 > 移动开发 > Android开发

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

2016-09-23 11:41 337 查看

百度地图

    百度地图的简单步骤

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里已有这两个文件,如果要集成到自己的工程里,就需要自己添加),拷贝完成后的工程目录如下图所示;



步骤::

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

第二步:在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;

@Override
protected 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);
}

@Override
public 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;
}

@Override
public 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  OverLay
BitmapDescriptor  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 {

@Override
public 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);
}
@Override
protected void onStart() {
super.onStart();
mMap.setMyLocationEnabled(true);
if (!mLocationClient.isStarted())
mLocationClient.start();
}
@Override
protected void onStop() {
super.onStop();
mMap.setMyLocationEnabled(false);
if(mLocationClient.isStarted())
mLocationClient.stop();
}

@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
}

@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
}

@Override
protected void onDestroy() {
super.onDestroy();
mMapView.onDestroy();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐