浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。
本章节将对自定义图层(图片覆盖物GroundOverlay)、自定义热力图(heatmap)做详细说明。
自定义图片图层(图片覆盖物GroundOvelay)

Ground覆盖物,是一种位于底图和底图标注层之间的特殊Overlay,该图层不会遮挡地图标注信息。通过GroundOverlayOptions类来设置,开发者可以通过GroundOverlayOptions类设置一张图片,该图片可随地图的平移、缩放、旋转等操作做相应的变换。

示例代码如下:

//定义Ground的显示地理范围
LatLng southwest = new LatLng(39.92235, 116.380338);
LatLng northeast = new LatLng(39.947246, 116.414977);
LatLngBounds bounds = new LatLngBounds.Builder()
        .include(northeast)
        .include(southwest)
        .build();

//定义Ground显示的图片
BitmapDescriptor bdGround = BitmapDescriptorFactory.fromResource(R.drawable.ground_overlay);
//定义GroundOverlayOptions对象
OverlayOptions ooGround = new GroundOverlayOptions()
        .positionFromBounds(bounds)
        .image(bdGround)
        .transparency(0.8f); //覆盖物透明度

//在地图中添加Ground覆盖物
mBaiduMap.addOverlay(ooGround);

效果如图:

     addOverlay1.png
自定义热力图

热力图是用不同颜色的区块叠加在地图上描述人群分布、密度和变化趋势的一个产品,百度地图SDK将绘制热力图的能力为开发者开放,帮助开发者利用自有数据,构建属于自己的热力图,提供丰富的展示效果。
注意:此处的“热力图功能”不同于“百度城市热力图”。百度城市热力图通过简单的接口调用,开发者可展示百度数据的热力图层。而此处的热力图功能,需要开发者传入自己的位置数据(坐标),然后SDK会根据热力图绘制规则,为开发者做本地的热力图渲染绘制。
.热力图生成的原理
大量自有坐标数据在地图打点,根据打点的密集程度,呈现热力图。
利用热力图功能构建自有数据热力图的方式如下:

1设置颜色变化
//设置渐变颜色值
int[] DEFAULT_GRADIENT_COLORS = {Color.rgb(102, 225, 0), Color.rgb(255, 0, 0)};
//设置渐变颜色起始值
float[] DEFAULT_GRADIENT_START_POINTS = {0.2f, 1f};
//构造颜色渐变对象
Gradient gradient = new Gradient(DEFAULT_GRADIENT_COLORS, DEFAULT_GRADIENT_START_POINTS);
2准备数据
//以下数据为随机生成地理位置点,开发者根据自己的实际业务,传入自有位置数据即可
List<LatLng> randomList = new ArrayList<LatLng>();

Random r = new Random();
for (int i = 0; i < 500; i++) {
    // 116.220000,39.780000 116.570000,40.150000
    int rlat = r.nextInt(370000);
    int rlng = r.nextInt(370000);
    int lat = 39780000 + rlat;
    int lng = 116220000 + rlng;
    LatLng ll = new LatLng(lat / 1E6, lng / 1E6);
    randomList.add(ll);
}

3添加显示热力图
//构造HeatMap
//在大量热力图数据情况下,build过程相对较慢,建议放在新建线程实现
HeatMap mCustomHeatMap = new HeatMap.Builder()
        .data(randomList)
        .gradient(gradient)
        .build();

//在地图上添加自定义热力图
mBaiduMap.addHeatMap(mCustomHeatMap);

显示效果如图:

addOverlay2.png

.移除热力图

heatMap.removeHeatMap();

.通过带权值的位置点数据构造HeatMap

大量自有坐标数据在地图打点,根据打点的密集程度,呈现热力图。如果开发者拥有的数据是一些坐标上的一个数值(如密度值、趋势值),通过Builder的 weightedData方法传入数据来构造。

//通过带权值的位置点数据构造HeatMap
HeatMap mCustomHeatMap = new HeatMap.Builder()
        .weightedData(randomList1)
        .gradient(gradient)
        .build();

可以理解为在某一坐标打点”密度值次“、”趋势值次“,地图即可呈现热力图。

但密度值、趋势值可能为小数,需要对数据做一下处理,比如整体密度值、趋势值扩大1000倍取整。 读取坐标数据时,某个坐标读取“1000倍密度值次”,那么坐标点的密度,就会通过热力呈现出来了。
  • 文档根本没法用

  • 文档水平很差

  • 文档水平一般

  • 文档不错

  • 文档写的很好

如发现文档错误,或对此文档有更好的建议,请在下方反馈。问题咨询请前往反馈平台提交工单咨询。

提交反馈

拖动标注工具

添加矩形标注

添加箭头标注

完成

取消