Android-具有以米为单位的固定半径的Google Maps API Heatmap

时间:2018-07-06 07:55:46

标签: java android google-maps kotlin google-maps-android-api-2

Android Google Maps API的Heatmap叠加层以像素为单位渲染半径,这意味着通过放大和缩小半径会越来越大。

我需要一个固定半径的热图(例如,以米为单位而不是像素),并且在放大和缩小时不会重新缩放。

有可能这样做吗?

2 个答案:

答案 0 :(得分:0)

在googlemap API中,获取比例数据。在用户界面中,您可以看到说明地图比例的图例。这样的东西-(在Google Maps右下角查看,我在下面谈论2000Ft问题)

enter image description here

您知道手机屏幕的厘米长度,知道完整宽度的像素,所以

cm(phoneScreen)->厘米/像素比率->像素半径到厘米半径。

我可以用一些数学推论得出。

答案 1 :(得分:0)

据我所见,您可以使用setRadius()方法来更改热图位置的半径,以响应更改的缩放比例。像这样:

    int DEFAULT_ZOOM_LEVEL = 10;
    int ZOOM_STEP_FOR_RADIUS = 2;

    mProvider = new HeatmapTileProvider.Builder()
            .data(mList)
            .setRadius(DEFAULT_ZOOM_LEVEL)
            .build();
    mOverlay = mMap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider));

    mMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener({
        @Override
        void onCameraIdle() {
            float newZoom = mMap.getCameraPosition().zoom;

            mProvider.setRadius(DEFAULT_ZOOM_LEVEL + newZoom * ZOOM_STEP_FOR_RADIUS)
            mOverlay.clearTileCache();
        }
    });