【问题标题】:Google Maps Android Heatmap Utility showing white tilesGoogle Maps Android Heatmap Utility 显示白色瓷砖
【发布时间】:2015-07-31 20:54:15
【问题描述】:
【问题讨论】:
-
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,谷歌的工程师可能会帮忙。