【问题标题】:Google Maps Android Heatmap Utility showing white tilesGoogle Maps Android Heatmap Utility 显示白色瓷砖
【发布时间】:2015-07-31 20:54:15
【问题描述】:

我将 Google Maps Android Heatmap Utility (https://developers.google.com/maps/documentation/android/utility/heatmap) 与 Google Maps API v2 结合使用。这个实用程序基本上只是一个类,实现了一个 TileProvider,可以使用 map.addTileOverlay 将其添加到地图中。代码在 GitHub 上公开:

https://github.com/googlemaps/android-maps-utils/blob/master/library/src/com/google/maps/android/heatmaps/HeatmapTileProvider.java

现在,当我运行他们的演示应用程序 (https://developers.google.com/maps/documentation/android/utility/setup) 时,我遇到了一个奇怪的错误。基本上,当查看的数据显示在屏幕中间时,一切正常。但是当您开始拖动屏幕并且数据到达屏幕边缘时,包含数据的图块变为白色。

一旦我将数据滚动回中心,一切又看起来正常了。

我很确定这不是 TileProvider 的图块生成代码中的错误,因为它的 getTile-Method 实际上从未返回任何白色或其他不正确的图块(我已经检查过)。我让几个人试用了演示应用程序,他们都可以重现问题。

我的问题是:

  1. 可以确定这是 Maps API v2 TileOverlay 中的错误吗?
  2. 以前有人遇到过这个问题吗?有什么解决办法吗?

【问题讨论】:

  • demo我也玩腻了,肯定会遇到这个问题,你可以报告问题here,谷歌工程师可能会帮忙。
  • 会的。非常感谢。

标签: android google-maps google-maps-api-2 android-maps-utils


【解决方案1】:

这是 GoogleMap 的问题。 android-maps-utils 方法 getTile 中的 HeatmapTileProvider 在您滚动地图时返回 TileProvider.NO_TILE 并且 GoogleMap 会清除所有带有 Heats 的图块。 我在项目中添加了一个 android-maps-utils 库(无 gradle 依赖项)并添加了此代码

private final static Tile BLANK_TILE = new Tile(0, 0, new byte[0]);
 public Tile getTile(int x, int y, int zoom) {
        boolean skipImage = false;
        ...
         if (!tileBounds.intersects(paddedBounds)) {
//            return TileProvider.NO_TILE;
            skipImage = true;
        }
        ...
        if (points.isEmpty()) {
//            return TileProvider.NO_TILE;
            skipImage = true;
        }
 if (!skipImage) {
            // Quantize points
            double[][] intensity = new double[TILE_DIM + mRadius * 2][TILE_DIM + mRadius * 2];
            for (WeightedLatLng w : points) {
                Point p = w.getPoint();
                int bucketX = (int) ((p.x - minX) / bucketWidth);
                int bucketY = (int) ((p.y - minY) / bucketWidth);
                intensity[bucketX][bucketY] += w.getIntensity();
            }
            // Quantize wraparound points (taking xOffset into account)
            for (WeightedLatLng w : wrappedPoints) {
                Point p = w.getPoint();
                int bucketX = (int) ((p.x + xOffset - minX) / bucketWidth);
                int bucketY = (int) ((p.y - minY) / bucketWidth);
                intensity[bucketX][bucketY] += w.getIntensity();
            }

            // Convolve it ("smoothen" it out)
            double[][] convolved = convolve(intensity, mKernel);

            // Color it into a bitmap
            bitmap = colorize(convolved, mColorMap, mMaxIntensity[zoom]);

            // Convert bitmap to tile and return
            return convertBitmap(bitmap);
        } else {
            return BLANK_TILE;
        }

【讨论】:

    【解决方案2】:

    我也克隆了here的demo,肯定会遇到这个问题,你可以报告问题here,谷歌的工程师可能会帮忙。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 2013-04-08
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多