将两个 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
现在两张地图都显示了想要的内容。
我想在 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 现在两张地图都显示了想要的内容。