Android将Heatmaps连接到当前位置

时间:2018-08-06 09:14:35

标签: android google-maps heatmap

我试图借助here在Google开发者上使用Android utility library

的教程,借助“ Google Map”在Android设备上绘制热图。

使用本教程中描述的示例代码,我实现了如下的热图:

enter image description here

如您所见,热图位置以绿色圆圈和点显示,但实际上,我想实现以下功能:

enter image description here

那是通过一条线将热图连接到当前位置。

有什么想法或帮助吗?

1 个答案:

答案 0 :(得分:1)

您可以使用SphericalUtil.interpolate()中的Google Maps Android API Utility Library获取源点之间的附加点,并将其发送到HeatmapTileProvider以获取“热图线”。例如,使用以下代码:

@Override
public void onMapReady(GoogleMap googleMap) {
    mGoogleMap = googleMap;

    // Create the gradient.
    int[] colors = {
            Color.rgb(102, 225, 0), // green
            Color.rgb(255, 0, 0)    // red
    };

    float[] startPoints = {
            0.2f, 1f
    };

    Gradient gradient = new Gradient(colors, startPoints);

    final List<LatLng> sourcePolyPoints = new ArrayList<>();
    sourcePolyPoints.add(new LatLng(28.537266, 77.208099));
    sourcePolyPoints.add(new LatLng(28.536965, 77.209571));
    sourcePolyPoints.add(new LatLng(28.536786, 77.209989));
    sourcePolyPoints.add(new LatLng(28.537886, 77.210205));
    sourcePolyPoints.add(new LatLng(28.537886, 77.210205));

    final List<LatLng> interpolatedPolyPoints = new ArrayList<>();
    for (int ixPoint = 0; ixPoint < sourcePolyPoints.size() - 1; ixPoint++) {
        int nInterpolated = 50;
        for (int ixInterpolated = 0; ixInterpolated < nInterpolated; ixInterpolated++) {
            LatLng interpolatedPoint = SphericalUtil.interpolate(sourcePolyPoints.get(ixPoint),
                    sourcePolyPoints.get(ixPoint + 1), (double) ixInterpolated / (double) nInterpolated);
            interpolatedPolyPoints.add(interpolatedPoint);
        }
    }

    // Create the tile provider.
    mProvider = new HeatmapTileProvider.Builder()
            .data(interpolatedPolyPoints)
            .gradient(gradient)
            .build();

    // Add the tile overlay to the map.
    mOverlay = mGoogleMap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider));

    mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(28.536965, 77.209571), 16));
}

您将在源点之间获得一条平滑的“热图线”,如下所示:

Heat map Path

您可以通过HeatmapTileProvider参数来调整“热图线”的颜色和宽度。而且,如果仅在道路上需要折线,则可以使用Snap to RoadGoogle Maps Roads API部分或Waleed Asim注释中提供的示例。