android - 放大/缩小一些未渲染的图 block - Osmdroid 离线 map

标签 android osmdroid android-assets

我正在从 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/

相关文章:

java - Picasso Android 内存问题,当 fragment 被替换时

java - 为什么我得到一个空位图?

android - 从像素转换为纬度/经度的问题

android - 圆形进度条

android - AssetInputStream.read() 总是返回 -1

javascript - 允许访问 android 中的本地 Assets

java - 卸载现有版本的 apk(如果存在)然后重新安装

android - Xamarin 会帮助将 win32 DLL 移植到 android 共享库吗?

java - 覆盖 OSMdroid 中的位置跟踪

flutter - 如何使用带有 flutter 的传单 "openstreetmap"?