谷歌地图Android热图工具显示白色瓷砖

谷歌地图Android热图工具显示白色瓷砖,android,google-maps,google-maps-api-2,android-maps-utils,Android,Google Maps,Google Maps Api 2,Android Maps Utils,我正在使用谷歌地图Android热图工具()和谷歌地图API v2。该实用程序基本上只是一个类,实现了一个TileProvider,可以使用Map.addTileOverlay将其添加到地图中。代码在GitHub上是公共的: 现在,当我运行他们的演示应用程序()时,我发现了一个奇怪的bug。基本上,当观察到的数据显示在屏幕中部时,一切都有效。但是,当您开始拖动屏幕,数据到达屏幕边缘时,包含数据的磁贴将变为白色 一旦我将数据滚回中心,一切看起来都很好 我很确定这不是TileProvider的t

我正在使用谷歌地图Android热图工具()和谷歌地图API v2。该实用程序基本上只是一个类,实现了一个TileProvider,可以使用Map.addTileOverlay将其添加到地图中。代码在GitHub上是公共的:

现在,当我运行他们的演示应用程序()时,我发现了一个奇怪的bug。基本上,当观察到的数据显示在屏幕中部时,一切都有效。但是,当您开始拖动屏幕,数据到达屏幕边缘时,包含数据的磁贴将变为白色

一旦我将数据滚回中心,一切看起来都很好

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

我的问题是:

  • 假设这是Maps API v2 TileOverlay中的一个bug,安全吗
  • 以前有人有过这个问题吗?有什么解决办法吗

  • 我也克隆了这个演示,很累,当然遇到了这个问题,你可以报告这个问题,谷歌的工程师可能会帮上忙。

    这是谷歌地图的问题。android maps utils方法getTile中的HeatmapTileProvider在滚动地图时返回TileProvider.NO_TILE,GoogleMap会清除所有带有Heats的TILE。 我在项目中添加了一个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;
            }
    

    我也厌倦了这个演示,当然遇到了这个问题,你可以报告这个问题,谷歌的工程师可能会帮上忙。非常感谢。流程是什么?你有问题追踪者的答案吗?很抱歉回复晚了。我向谷歌报告了这个问题,并被接受: