看完本文后,喜欢安卓的亲们可以接着看看http://blog.csdn.net/woshishuoshuoa/article/details/9858417哦
谷歌地图开放性很好,可惜,可以值得参考的资料太少,而且谷歌改版后,对手机的版本要求也变了,部分接口对手机版本要求偏高,更值得一提的是部分接口居然还会抽风。。。不过,谷歌地图的确做的很大耶很好,所以在简单地学习了谷歌之后再来学习百度地图的话,就会觉得很容易了,百度地图很多东西就是从谷歌那学来的,不过由于开发性低,百度地图很多东西都是做死了的,不允许其他人修改的,下面就简单地聊一聊百度地图吧~~~
学习百度地图时,多看看百度地图api官网http://developer.baidu.com/上面教你怎样申请api key,怎样获取世界地图,怎样定位等等,说的都很详细的,这里小菜鸟就不多说什么了,不过官网给的东西有些还需要自己动点脑筋整合一下,这样吧,小菜鸟就贴出点代码给大家看看吧,都是很简单的列子哦~~~
http://developer.baidu.com/map/sdkandev-2.htm详细地讲解了如何获取一个世界地图~~~
获取了世界地图之后如何定位到自己当前的位置呢,只需在获取世界地图的基础上修改MainActivity中的代码如下即可:
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.map.LocationData;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationOverlay;
import com.baidu.platform.comapi.basestruct.GeoPoint;
import android.os.Bundle;
import android.util.Log;
import android.app.Activity;
public class MainActivity extends Activity {
BMapManager mBMapMan = null;
MapView mMapView = null;
public LocationClient mLocationClient=null;
public BDLocationListener myListener=new MyLocationListener();
@Override
protected void onCreate(Bundle savedInstanceState) {
//======================================================初始化地图Activity、使用Key========================================
super.onCreate(savedInstanceState);
mBMapMan=new BMapManager(getApplication());
mBMapMan.init("4b605b48b3062e4687d0ada2ecd65a8e", null);
//注意:请在试用setContentView前初始化BMapManager对象,否则会报错
setContentView(R.layout.activity_main);
mMapView=(MapView)findViewById(R.id.bmapsView);
mMapView.setBuiltInZoomControls(true);
//设置启用内置的缩放控件
MapController mMapController=mMapView.getController();
// 得到mMapView的控制权,可以用它控制和驱动平移和缩放
GeoPoint point =new GeoPoint((int)(39.915* 1E6),(int)(116.404* 1E6));
//用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)
mMapController.setCenter(point);//设置地图中心点
mMapController.setZoom(12);//设置地图zoom级别
//===========================================================初始化地图完成================================================
mLocationClient=new LocationClient(getApplicationContext()); //声明LocationClient类
mLocationClient.registerLocationListener(myListener);//注册监听函数
LocationClientOption option=new LocationClientOption();
option.setOpenGps(true);
option.setAddrType("all");//返回的定位结果包含地址信息
option.setCoorType("bd0911");//返回的定位结果是百度经纬度,默认值gcj02
option.setScanSpan(2000);
option.disableCache(true);//禁止启用缓存定位
option.setPoiDistance(1000);//poi查询距离
option.setPoiExtraInfo(true);//是否需要POI的电话和地址等详细信息
mLocationClient.setLocOption(option);
mLocationClient.start();//启动LocationClient!!!
mMapView.getController().setZoom(15);
if (mLocationClient!=null&&mLocationClient.isStarted()) {
mLocationClient.requestLocation();
}
else {
Log.d("LocSDK3", "location is null or not started");
if (mLocationClient!=null&&mLocationClient.isStarted()) {
mLocationClient.requestPoi();
}
}
}
class MyLocationListener implements BDLocationListener{
@Override
public void onReceiveLocation(BDLocation location) {
// TODO Auto-generated method stub
GeoPoint geoPoint=new GeoPoint((int)(location.getLatitude()*1E6),(int)(location.getLongitude()*1E6));
/* MyLocationOverlay只负责显示我的位置,
* 将获取的位置数据放在一个LocationData结构中并用该结构设置MyLcationOverlay的数据源,
* 即可创建MyLocationOverlay*/
MyLocationOverlay myLocationOverlay=new MyLocationOverlay(mMapView);
LocationData locationData=new LocationData();
locationData.latitude=location.getLatitude();
locationData.longitude=location.getLongitude();
locationData.direction=2.0f;
myLocationOverlay.setData(locationData);
mMapView.getOverlays().clear();
mMapView.getOverlays().add(myLocationOverlay);
mMapView.refresh();//在更新地图覆盖物后,需调用MapView.refresh() 使更新生效
mMapView.getController().animateTo(geoPoint);
}
@Override
public void onReceivePoi(BDLocation arg0) {
// TODO Auto-generated method stub
}
}
//===================================================重写以下方法,管理API============================================
@Override
protected void onDestroy(){
mMapView.destroy();
if(mBMapMan!=null){
mBMapMan.destroy();
mBMapMan=null;
}
super.onDestroy();
}
@Override
protected void onPause(){
mMapView.onPause();
if(mBMapMan!=null){
mBMapMan.stop();
}
super.onPause();
}
@Override
protected void onResume(){
mMapView.onResume();
if(mBMapMan!=null){
mBMapMan.start();
}
super.onResume();
}
}
注意点:不要忘记在Mainfest中添加service
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"></service>
效果图: