我正在从 assets 加载图 block ,这些是我的代码,用于初始化 map :
mapView = (MapView)findViewById(R.id.offline_map_view);
mapView.setClickable(true);
mapView.setBuiltInZoomControls(false);
mapView.setMaxZoomLevel(macroZoomLevel);
mapView.setMinZoomLevel(macroZoomLevel);
mapView.getController().setZoom(macroZoomLevel); //set initial zoom-level, depends on your need
mapView.setTileSource(new XYTileSource("MapQuest", 0, 18, 256, ".png",new String[] {"file:///android_asset/try/"} ));
mapView.setUseDataConnection(false); //keeps the mapView from loading online tiles usi1ng network connection.
mapView.getController().setCenter(new GeoPoint(54.370958, 18.589210));
giveMarkersForActualLevel();
一切正常,直到我尝试放大,有部分 map 无法正确渲染。然后我缩小,开始时正确渲染的区域现在有一些灰色瓷砖。
首先,我使用的是osmdroid 4.3,是这样添加的:
compile 'org.osmdroid:osmdroid-android:4.3'
然后我尝试使用最新版本的 osmdroid,通过 website 中描述的方法导入它编译'org.osmdroid:osmdroid-android:5.1@aar'
然后我读了here你从源代码构建,所以我下载了最新的源代码,通过 gradle 构建它并添加了 aar
文件 osmdroid-android-release.aar
。
这也不能解决我的问题。
放大和缩小后,我要删除标记并添加另一个标记,所以我尝试以这种方式刷新 map 。
((View)mapView.getParent()).invalidate();
mapView.invalidate();
mapView.postInvalidate();
Marker startMarker = new Marker(mapView);
startMarker.setPosition(new GeoPoint(54.337385, 18.662132));
setPropertiesForTopMarker(startMarker);
mapView.getOverlays().add(startMarker);
Marker startMarker1 = new Marker(mapView);
startMarker1.setPosition(new GeoPoint(54.332781, 18.587932));
setPropertiesForTopMarker(startMarker1);
mapView.getOverlays().add(startMarker1);
mapView.invalidate();
((View)mapView.getParent()).invalidate();
mapView.invalidate();
mapView.postInvalidate();
但它也不起作用。
您有什么想法,如何解决这个问题?
编辑:
我试图从源代码构建 osmdroid 以更改@spy 提到的这个值。我的 logcat 的调试看起来没问题。 Here是日志。这里贴不下去了,因为行太多了。
我尝试以这种方式添加磁贴提供程序:
final IRegisterReceiver registerReceiver = new SimpleRegisterReceiver(getApplicationContext());
final ITileSource tileSource = new XYTileSource("MapQuest", 12, 14, 256, ".png",new String[] {"file:///android_asset/MapQuest/"} );
final MapTileFilesystemProvider fileSystemProvider = new MapTileFilesystemProvider(
registerReceiver, tileSource);
final MapTileProviderArray tileProviderArray = new MapTileProviderArray(
tileSource, registerReceiver, new MapTileModuleProviderBase[] {
fileSystemProvider});
mapView = new MapView(this, new DefaultResourceProxyImpl(this), tileProviderArray);
或者这样
final IRegisterReceiver registerReceiver = new SimpleRegisterReceiver(getApplicationContext());
final ITileSource tileSource = new XYTileSource("MapQuest", 12, 14, 256, ".png",new String[] {"file:///android_asset/MapQuest/"} );
final MapTileFilesystemProvider fileSystemProvider = new MapTileFilesystemProvider(
registerReceiver, tileSource);
final MapTileProviderArray tileProviderArray = new MapTileProviderArray(
tileSource, registerReceiver, new MapTileModuleProviderBase[] {
fileSystemProvider});
TilesOverlay tilesOverlay =
new TilesOverlay(tileProviderArray, getApplicationContext());
mapView.getOverlays().add(tilesOverlay);
但是这两种方法都没有给我显示任何 map 。 Source这段代码。
最佳答案
值得尝试的东西......
如果您只想加载 Assets ,请使用仅包含断言加载器的自定义图 block 提供程序数组。在上面的配置中,它仍然是在线机制(okhttp 或设备上的任何东西)尝试从 file:///下载文件,这可能与文件 url 的行为很奇怪。
也可以尝试通过 OpenStreetMapTileProviderConstants.DEBUGMODE 和 DEBUG_TILE_PROVIDERS 打开图 block 调试。它可能会揭示根本原因
关于android - 放大/缩小一些未渲染的图 block - Osmdroid 离线 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35393295/