将两个 osmdroid 地图视图合二为一 Activity

Use two osmdroid Map Views in one Activity

我想在 activity 中并排使用两个地图片段,每个片段都有不同的片段。左边的地图计划显示特定区域的概览,右边的地图放大到特定点。

我遇到的问题是,只有第一个(左)地图片段被正确显示,第二个(右)显示世界地图:

缩放在正确的地图上不起作用。

这是我使用的部分代码:

private void initializeMap()
{       
    MapTileProviderBasic tileProviderOSM = new MapTileProviderBasic(getApplicationContext());
    ITileSource tileSourceOSM = new XYTileSource("OpenFireMap", null, 1, 18, 256, ".png", new String[]{"http://openfiremap.org/hytiles/"});
    tileProviderOSM.setTileSource(tileSourceOSM);
    TilesOverlay tilesOverlayOSM = new TilesOverlay(tileProviderOSM, this.getBaseContext());
    tilesOverlayOSM.setLoadingBackgroundColor(Color.TRANSPARENT);

    OsmFragment frag = (OsmFragment) getFragmentManager().findFragmentById(R.id.osmMap);
    osmMap = frag.getMap();
    osmMap.setMultiTouchControls(true);
    osmMap.getOverlays().add(tilesOverlayOSM);

    MapTileProviderBasic tileProviderOSMDetail = new MapTileProviderBasic(getApplicationContext());
    ITileSource tileSourceOSMDetail = new XYTileSource("OpenFireMap", null, 1, 18, 256, ".png", new String[]{"http://openfiremap.org/hytiles/"});
    tileProviderOSMDetail.setTileSource(tileSourceOSMDetail);
    TilesOverlay tilesOverlayOSMDetail = new TilesOverlay(tileProviderOSMDetail, this.getBaseContext());
    tilesOverlayOSMDetail.setLoadingBackgroundColor(Color.TRANSPARENT);

    OsmFragment fragDetail = (OsmFragment) getFragmentManager().findFragmentById(R.id.osmMapDetail);
    osmMapDetail = fragDetail.getMap();
    osmMapDetail.setMultiTouchControls(true);
    osmMapDetail.getOverlays().add(tilesOverlayOSMDetail);
}

如果我将其中一个片段更改为 GoogleMaps 片段,则 osmdroid 地图会正确加载。

知道为什么会这样吗?我该如何解决?我正在使用来自 gradle (v5.6.4)

的最新 osmdroid 版本

提前致谢。

编辑: 我改了变量声明,还是不行

您必须为不同的地图视图创建单独的 TilesOverlays。目前您在两个片段中使用单个叠加层,这是行不通的。

所以我找到了解决方案。问题是,MapView 位于一个片段中,而该片段是一个自定义的 class,其中包含硬编码的 ID 和布局。对我有用的解决方案是复制自定义片段 class 并编辑 ID 和布局。然后在 MainActivity 中,我不得不将变量声明和转换从 OsmFragment 更改为 OsmFragmentDetail 现在两张地图都显示了想要的内容。