【发布时间】:2016-02-14 15:10:37
【问题描述】:
我正在从资产加载图块,这是我的代码,用于初始化地图:
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();
在我尝试放大之前一切正常,有些地图无法正确渲染。然后我缩小,然后开始正确渲染的区域现在有一些灰色瓷砖。
首先我用的是osmdroid 4.3,这样添加的:
compile 'org.osmdroid:osmdroid-android:4.3'
然后我尝试使用最新版本的osmdroid,通过websitecompile 'org.osmdroid:osmdroid-android:5.1@aar'中描述的方法导入它
然后我从源代码中阅读了here tu build,因此我下载了最新的源代码,通过 gradle 构建它并添加了aar 文件osmdroid-android-release.aar。
这也不能解决我的问题。
放大和缩小后,我正在删除标记并添加另一个标记,因此我尝试以这种方式刷新地图。
((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);
但是这两种方法都没有显示任何地图。 Source 此代码。
【问题讨论】:
-
你确定你有那个缩放级别的图块吗?
-
如果我没有那个级别的图块,放大后我看不到任何图块。更重要的是,如果我回到初始缩放级别,我可以看到一些灰色图块,以前以正确的方式呈现。当我回到家时,我会尝试用更多细节更新问题。
-
我有同样的问题,我还不知道原因,但是在放大和缩小时,我多次出现以下消息:“在正在使用的位图上调用了重新配置!这可能导致图形损坏!”我正在使用 OSMDroid 5.1 并针对 Android M
标签: android osmdroid android-assets