我正在从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);
}
}
如何更快地制作此代码?
答案 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),但最大的性能影响是将渲染的平铺存储在文件系统缓存中。