将OpenSeaMap集成到Android应用程序中

将OpenSeaMap集成到Android应用程序中,android,openstreetmap,openseamap,Android,Openstreetmap,Openseamap,我成功地使用将OpenStreetMap集成到我的Android应用程序中,并决定尝试将其用作地图平铺提供商(该应用程序以海洋为中心) 按照将自定义磁贴提供程序合并到osmdroid中的说明,我添加了以下代码: // Create a custom tile source final IRegisterReceiver registerReceiver = new SimpleRegisterReceiver(context); final ITileSource til

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

按照将自定义磁贴提供程序合并到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中遇到过类似的问题?

所以,这有点双重性,下面是我现在运行的代码

// 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状态有助于避免黑瓷砖,耐心一点可以将覆盖从服务器上拉下来,速度有点慢

您知道OpenSeaMap不提供完整的瓷砖,而只提供覆盖层吗?您将始终需要另一层作为基础层。我不确定这是否得到osmdroid.Hi@scai的支持,在关注了一些关于其他人如何完成类似任务的链接后,我得出了相同的结论。不幸的是,添加OpenSeaMap覆盖时,“黑色瓷砖”的结果仍然很明显。我怀疑(由于我编写的代码有时会工作)这可能是一个z轴重叠问题/硬件加速问题。我会随时向你通报我发现的任何新情况。谢谢你的评论。