1

我使用osmdroid成功地将 OpenStreetMap 集成到我的 Android 应用程序中,并决定尝试使用OpenSeaMap作为地图图块提供程序(该应用程序以海洋为中心)。

按照此处概述的将自定义切片提供程序合并到osmdroid中的说明,我添加了以下代码:

    // Create a custom tile source
    final IRegisterReceiver registerReceiver = new SimpleRegisterReceiver(context);
    final ITileSource tileSource = new XYTileSource("Mapnik", 
                                                    ResourceProxy.string.mapnik, 
                                                    1, 
                                                    18, 
                                                    256, 
                                                    ".png", 
                                                    new String[] {"http://tiles.openseamap.org/seamark/"});

    // Create a file cache modular provider
    final TileWriter tileWriter = new TileWriter();
    final MapTileFilesystemProvider fileSystemProvider = new MapTileFilesystemProvider(registerReceiver, tileSource);
    // Create a download modular tile provider
    final NetworkAvailabliltyCheck networkAvailabliltyCheck = new NetworkAvailabliltyCheck(context);
    final MapTileDownloader downloaderProvider = new MapTileDownloader(tileSource, tileWriter, networkAvailabliltyCheck);

    // Create a custom tile provider array with the custom tile source and the custom tile providers
    final MapTileProviderArray tileProviderArray = new MapTileProviderArray(tileSource, registerReceiver, new MapTileModuleProviderBase[] { fileSystemProvider, downloaderProvider });

    // Create the mapview with the custom tile provider array
    this.mapView = new MapView(context, 256, new DefaultResourceProxyImpl(context), tileProviderArray);

...值得注意的是,我编写的代码不包括 GEMF 文件存档。老实说,我不明白这意味着什么。希望有人也可以对这个话题有所了解。这样做的效果有点说明问题。提供 OpenSeaMap 信息的地方会显示一个黑色图块。进一步放大后,瓷砖似乎杂乱无章。

OpenSeaMap 添加内容的黑色图块

随着我继续试验,我注意到有时 OpenSeaMap 数据会正确呈现;

一种工作的 OpenSeaMap

有没有人在使用 OpenSeaMap 时遇到过类似的问题?

4

1 回答 1

2

所以,这有点像双重事情,这是我现在正在运行的代码;

// Create a custom tile source
final ITileSource seamarks = new XYTileSource("seamarks", 
                                              null, 
                                              0, 
                                              19, 
                                              256, 
                                              ".png", 
                                              new String[] {"http://tiles.openseamap.org/seamark/"});
final MapTileProviderBasic tileProvider = new MapTileProviderBasic(context, seamarks);
final TilesOverlay seamarksOverlay = new TilesOverlay(tileProvider, context);
seamarksOverlay.setLoadingBackgroundColor(Color.TRANSPARENT);
seamarksOverlay.setUseSafeCanvas(true);

// Create the mapview with the custom tile provider array
this.mapView = new MapView(context, 256);
this.mapView.setMultiTouchControls(true);
this.mapView.setUseSafeCanvas(true);
this.mapView.getOverlays().add(seamarksOverlay);

...setLoadingBackgroundColor状态帮助避免了黑色瓷砖,并且有点耐心允许从服务器上拉下覆盖,这有点慢!

于 2014-05-27T22:47:49.620 回答