虚拟地图图块提供程序无法正常工作(未调用getTile)

时间:2014-01-16 15:10:19

标签: android map offline

我想使用谷歌地图api v2,但在后台只显示一个虚拟地图。 这是我正在使用的PNG文件的示例,名为“dummy_map_tile.png”。我将它放在资产文件夹中,名为“images”的目录下。它的大小是256x256像素。还尝试了类似JPG的文件。

My dummy map tile:

这是我的虚拟地图图块提供程序的代码,当然应该脱机工作:

public class DummyTileProvider implements TileProvider {

    protected Tile mDummyTile = null;

    public DummyTileProvider(Context context) {
        InputStream inputStream = null;
        ByteArrayOutputStream outputStream = null;
        try {
            String tileFilename = "images/dummy_map_tile.png";
            inputStream = context.getResources().getAssets().open(tileFilename);
            outputStream = new ByteArrayOutputStream();
            byte[] buffer = new byte[2048];
            int count;
            while((count = inputStream.read(buffer)) != -1)
                outputStream.write(buffer, 0, count);
            outputStream.flush();
            mDummyTile = new Tile(256, 256, outputStream.toByteArray());
        }
        catch (IOException e) {
            mDummyTile = null;
        }
        finally {
            if (inputStream != null)
                try {inputStream.close();} catch (IOException e) {}
            if (outputStream != null)
                try {outputStream.close();} catch (IOException e) {}
        }
    }

    @Override
    public Tile getTile(int x, int y, int zoom) {
        return mDummyTile;
    }
}

某些日志记录(上面的代码中未显示)允许我确保虚拟磁贴提供程序正确构造,即没有发生IOException,并且mDummyTile不为null。

这是我在地图设置中设置切片提供程序的方式(mMap是我的GoogleMap对象,已正确初始化):

    mMap.setMapType(GoogleMap.MAP_TYPE_NONE);
    DummyTileProvider tileProvider = new DummyTileProvider(this);
    mMap.addTileOverlay(new TileOverlayOptions().tileProvider(tileProvider));

不幸的是,地图根本没有显示。 永远不会调用getTile方法。 不过,我在地图上绘制的所有标记和其他东西都能正常工作。 如果我删除上面的三行代码,因此使用默认的磁贴提供程序,所有工作都完美,显示标准的谷歌地图(仅限在线模式)。 任何人都可以给我一个有用的提示吗?

1 个答案:

答案 0 :(得分:4)

磁贴提供程序没有任何问题。在其余的代码中只是一个错误,恰好在地图对象上调用方法clear(),从而从地图中删除了tile提供程序。不过,我希望这个虚拟磁贴提供程序的例子很有用,所以我会把它放在这里。