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(); } }
相关文章推荐
- Android使用百度地图---添加覆盖物及定位
- android 百度地图定位与覆盖物的添加,以及他们的点击事件
- Android 百度地图(二)——地图切换、定位、添加覆盖物、搜索位置、连线
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- android百度地图 添加覆盖物Marker与InfoWindow的使用
- Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- 百度地图----->地图类型、定位模式、实时交通、我的位置、添加覆盖物、覆盖物详情及提示
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android——百度地图开发、添加覆盖物、地理编码和反地理编码、以及覆盖物之间的连线
- Android 百度地图频繁添加覆盖物后刷新出现地图闪烁问题(个人)
- android--百度地图--方向定位+覆盖物显示
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图添加标记+定位+导航(从定位点开始导航到自己添加的点)
- Android之3.5版的百度地图的定位、覆盖物实现以及覆盖物的点击事件