如何加快加载/设置磁贴 - OSMDROID

时间:2018-01-12 10:21:10

标签: java android openstreetmap osmdroid

我正在从grib数据开始创建和设置新的tile,但应用程序非常慢:

try {
            gribFileTileSource.setRecord(1);
            for (int j=0;j<tileSize;j++) {
                lat=minLat+j*dLat;
                for (int i=0;i<tileSize;i++) {
                    lon=minLon+i*dLon;
                    //Log.d(LOG_TAG,"lon:"+lon+" lat:"+lat);
                    u=gribFileTileSource.getValue(lat,lon);
                    color=gribFileTileSource.getColor(u);
                    bitmap.setPixel(i,tileSize-j-1,color);
                }
            }

如何更快地制作此代码?

1 个答案:

答案 0 :(得分:1)

听起来你有一个自定义磁贴源并且正在渲染东西。如果是这种情况,您需要查看适用于osmdroid的MapsForge提供程序。

有用的秘诀在于以下课程:  MapsForgeTileModuleProvider

这个类执行类似的功能,它可以动态渲染瓷砖。渲染切片后,会将它们写入IFileSystemCache,这可以通过SQL比每次渲染/生成图像快几个数量级。

所以基本上,在你制作了有问题的瓷砖之后,将它存储在IFileSystemCache#.saveFile(tileSource, pTile, new ByteArrayInputStream(bitmapdata));或其他东西中(确保关闭流)

在您能够生成切片后,将所有内容与扩展MapTileProviderArray的类连接在一起。这是锻造材料的例子: https://github.com/osmdroid/osmdroid/blob/master/osmdroid-mapsforge/src/main/java/org/osmdroid/mapsforge/MapsForgeTileProvider.java

请注意,它会创建一个MapTileFilesystemProvider,首先加载缓存的tile,然后是tile编写器,然后是tile提供程序(它会动态生成tile)。然后可以使用mapView.setTileProvider()

将此自定义地图平铺提供程序数组附加到地图

因此,这不会使平铺渲染更快(好吧,它可能因为模块支持多个线程,请参阅this),但最大的性能影响是将渲染的平铺存储在文件系统缓存中。