码迷,mamicode.com
首页 > 其他好文 > 详细

百度地图开发入门【不同图层及覆盖物】

时间:2015-05-02 22:08:07      阅读:413      评论:0      收藏:0      [点我收藏+]

标签:风飞雪未扬   百度地图开发   最新版百度地图   v3.4   v5.1   

上次我们一起完成了helloMap这个最基本的地图,这次我们来体验下不同视觉地图的魅力

1.了解地图的最基本管理类BaiduMap 

方法很简单就是
mapview.getMap();
然后我们来看一下里面的方法
官方文档这么说来着
void addHeatMap(HeatMap heatmap)
添加热力图
Overlay addOverlay(OverlayOptions options)
向地图添加一个 Overlay
void animateMapStatus(MapStatusUpdate update)
以动画方式更新地图状态,动画耗时 300 ms
void animateMapStatus(MapStatusUpdate update, int durationMs)
以动画方式更新地图状态
void clear()
清空地图所有的 Overlay 覆盖物以及 InfoWindow
MyLocationConfiguration getLocationConfigeration()
获取定位图层配置信息
MyLocationData getLocationData()
获取定位数据
MapStatus getMapStatus()
获取地图的当前状态
int getMapType()
获取地图当前的模式,普通地图或者卫星图
float getMaxZoomLevel()
获取地图最大缩放级别
float getMinZoomLevel()
获取地图最小缩放级别
Projection getProjection()
获取地图投影坐标转换器, 当地图初始化完成之前返回 null,在 OnMapLoadedCallback.onMapLoaded() 之后才能正常
UiSettings getUiSettings()
获取地图ui控制器
void hideInfoWindow()
隐藏当前 InfoWindow
boolean isBaiduHeatMapEnabled()
获取是否打开百度热力图层(百度自有数据图层)
boolean isBuildingsEnabled()
获取是否允许楼块效果
boolean isMyLocationEnabled()
获取是否允许定位图层
boolean isSupportBaiduHeatMap()
查询当前图区是否支持百度热力图
boolean isTrafficEnabled()
获取是否打开交通图层
void removeMarkerClickListener(BaiduMap.OnMarkerClickListener listener)
移除一个地图 Marker 覆盖物点击事件监听者
void setBaiduHeatMapEnabled(boolean enabled)
设置是否打开百度热力图图层(百度自有数据图层) 注:地图层级大于11时,可显示热力图
void setBuildingsEnabled(boolean enabled)
设置是否允许楼块效果
void setMapStatus(MapStatusUpdate update)
改变地图状态
void setMapType(int type)
设置地图类型 MAP_TYPE_NORMAL 普通图; MAP_TYPE_SATELLITE 卫星图
void setMaxAndMinZoomLevel(float max, float min)
设置地图最大以及最小缩放级别,地图支持的最大最小级别分别为[3-20]
void setMyLocationConfigeration(MyLocationConfiguration configeration)
设置定位图层配置信息,只有先允许定位图层后设置定位图层配置信息才会生效,参见 setMyLocationEnabled(boolean)
void setMyLocationData(MyLocationData data)
设置定位数据, 只有先允许定位图层后设置数据才会生效,参见 setMyLocationEnabled(boolean)
void setMyLocationEnabled(boolean enabled)
设置是否允许定位图层
void setOnMapClickListener(BaiduMap.OnMapClickListener listener)
设置地图单击事件监听者
void setOnMapDoubleClickListener(BaiduMap.OnMapDoubleClickListener listener)
设置地图双击事件监听者
void setOnMapDrawFrameCallback(BaiduMap.OnMapDrawFrameCallback callback)
设置百度地图在每一帧绘制时的回调接口,该接口在绘制线程中调用
void setOnMapLoadedCallback(BaiduMap.OnMapLoadedCallback callback)
设置地图加载完成回调
void setOnMapLongClickListener(BaiduMap.OnMapLongClickListener listener)
设置地图长按事件监听者
void setOnMapStatusChangeListener(BaiduMap.OnMapStatusChangeListener listener)
设置地图状态监听者
void setOnMapTouchListener(BaiduMap.OnMapTouchListener listener)
设置触摸地图事件监听者
void setOnMarkerClickListener(BaiduMap.OnMarkerClickListener listener)
设置地图 Marker 覆盖物点击事件监听者,自3.4.0版本起可设置多个监听对象,停止监听时调用removeMarkerClickListener移除监听对象 开发者注意根据OnMarkerClickListener的参数Marker来判断响应某个对象的点击事件
void setOnMarkerDragListener(BaiduMap.OnMarkerDragListener listener)
设置 Marker 拖拽事件监听者
void setOnMyLocationClickListener(BaiduMap.OnMyLocationClickListener listener)
设置定位图标点击事件监听者
void setTrafficEnabled(boolean enabled)
设置是否打开交通图层
void showInfoWindow(InfoWindow infoWindow)
显示 InfoWindow
void snapshot(BaiduMap.SnapshotReadyCallback callback)
发起截图请求
void snapshotScope(Rect rect, BaiduMap.SnapshotReadyCallback callback)
发起区域截图请求 注: Rect为null,截全屏
下面我们就用上面的方法来做一些基本的例子

2.实时交通图

xml文件不变,志勇对activity做一点修改就可以了。
package com.flyou.hellomap;

import android.app.Activity;
import android.os.Bundle;

import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.MapView;

public class TrafficMapActivity extends Activity {
  MapView mMapView = 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);
    // 设置开启交通图
    mMapView.getMap().setTrafficEnabled(true);

  }

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


}
图中绿色的路段为畅通路段,红色的呵呵……
技术分享

3.城市热力图

配置类似于上面
package com.flyou.hellomap;

import android.app.Activity;
import android.os.Bundle;

import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.MapView;

public class HeatMapActivity extends Activity {
  MapView mMapView = 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);

    mMapView.getMap().setBaiduHeatMapEnabled(true);
  }

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

}

好吧,这是晚上获取的热力图,基本上温度都不是很高,看不出来……白天很明显

技术分享

4.标注坐标点


LatLng 是最新版里面增加的坐标类,里面设置有坐标的经度和纬度

// 构建mark图标
    BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);

//声明图标覆盖
 OverlayOptions options = new MarkerOptions().icon(bitmap).title("河南大学").position(point);


package com.flyou.hellomap;

import android.app.Activity;
import android.os.Bundle;

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.MapView;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;

public class OverlayMapActivity extends Activity {
  MapView mMapView = 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);

    // 获得map的管理对象
    BaiduMap map = mMapView.getMap();

    // 定义坐标点
    LatLng point = new LatLng(39.963175, 116.400244);
    // 构建mark图标
    BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);
    // 构建markeroption,用于在地图上添加marker
    OverlayOptions options = new MarkerOptions().icon(bitmap).title("河南大学").position(point);

    map.addOverlay(options);
  }

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

}


技术分享


5.几何覆盖物

核心代码
//定义多边形的五个顶点  
    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);  
    List<LatLng> pts = new ArrayList<LatLng>();  
    pts.add(pt1);  
    pts.add(pt2);  
    pts.add(pt3);  
    pts.add(pt4);  
    pts.add(pt5);  
    //构建用户绘制多边形的Option对象  
    OverlayOptions polygonOption = new PolygonOptions()  
        .points(pts)  
        .stroke(new Stroke(5, 0xAA00FF00))  
        .fillColor(0xAAFFFF00);  
    //在地图上添加多边形Option,用于显示  
    map.addOverlay(polygonOption);


技术分享

6.文字覆盖物

//定义文字所显示的坐标点  
    LatLng llText = new LatLng(39.86923, 116.397428);  
    //构建文字Option对象,用于在地图上添加文字  
    OverlayOptions textOption = new TextOptions()  
        .bgColor(0xAAFFFF00)  
        .fontSize(24)  
        .fontColor(0xFFFF00FF)  
        .text("flyou")  
        .rotate(-30)  
        .position(llText);  
    //在地图上添加该文字对象并显示  
    map.addOverlay(textOption);

技术分享

7.自定义其他弹出覆盖物



/创建InfoWindow展示的view  
    Button button = new Button(getApplicationContext());  
    button.setBackgroundResource(R.drawable.button_down);  
    //定义用于显示该InfoWindow的坐标点  
    LatLng pt = new LatLng(39.86923, 116.397428);  
    //创建InfoWindow , 传入 view, 地理坐标, y 轴偏移量 
    InfoWindow mInfoWindow = new InfoWindow(button, pt, -47);  
    //显示InfoWindow  
    map.showInfoWindow(mInfoWindow);
技术分享

这一次我们主要学习了一些覆盖物和图层的用法,都很简单有没有……


百度地图开发入门【不同图层及覆盖物】

标签:风飞雪未扬   百度地图开发   最新版百度地图   v3.4   v5.1   

原文地址:http://blog.csdn.net/u013616976/article/details/45441971

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!