如何在OSMDROID中从“正常视图”切换到“卫星视图”

3
好的,这就是问题所在,我认为可以做类似于map.setSatellite(true);这样的事情,但在OSMdroid中不可能实现。
另一个麻烦是是否可能下载地图,因为我需要离线工作,我的老板说应该可以下载地图。 我知道使用离线地图的唯一方法是使用mobac制作地图,然后手动存储它们以进行查询。
我已经阅读了关于使用bing的一些内容,但我不确定,您知道另一种方法吗?我想我需要在线使用bing库。 我正确吗?
3个回答

1

我知道现在回答已经有点晚了,但对于其他人来说,这可能会有所帮助。

OpenStreetMap(OSM)没有提供任何航空影像图层(卫星视图)。但是使用MAPBOX,我们可以在OSM中实现卫星视图。

要做到这一点,请使用以下代码片段:

将此元数据添加到AndroidManifest中。

<meta-data
        android:name="MAPBOX_MAPID"
        android:value="satellite-streets-v11"/>
<meta-data
        android:name="MAPBOX_ACCESS_TOKEN"
        android:value="PUT_YOUR_MAPBOX_ACCESS_TOKEN"/>

请创建以下MapBoxTileSourceFixed.java类:
//waiting for osmdroid #1718 to be fixed:
class MapBoxTileSourceFixed extends MapBoxTileSource {
    MapBoxTileSourceFixed(String name, int zoomMinLevel, int zoomMaxLevel, int tileSizePixels) {
        super(name, zoomMinLevel, zoomMaxLevel, tileSizePixels, "");
    }

    @Override public String getTileURLString(final long pMapTileIndex) {
        StringBuilder url = new StringBuilder("https://api.mapbox.com/styles/v1/mapbox/");
        url.append(getMapBoxMapId());
        url.append("/tiles/");
        url.append(MapTileIndex.getZoom(pMapTileIndex));
        url.append("/");
        url.append(MapTileIndex.getX(pMapTileIndex));
        url.append("/");
        url.append(MapTileIndex.getY(pMapTileIndex));
        //url.append("@2x"); //for high-res
        url.append("?access_token=").append(getAccessToken());
        String res = url.toString();
        return res;
    }
}

最后,在地图视图中设置MapBoxTileSource,如下所示:

OnlineTileSourceBase MAPBOXSATELLITELABELLED = new MapBoxTileSourceFixed("MapBoxSatelliteLabelled", 1, 19, 256);
    ((MapBoxTileSource) MAPBOXSATELLITELABELLED).retrieveAccessToken(this);
    ((MapBoxTileSource) MAPBOXSATELLITELABELLED).retrieveMapBoxMapId(this);
    TileSourceFactory.addTileSource(MAPBOXSATELLITELABELLED);
    map.setTileSource(MAPBOXSATELLITELABELLED);
    map.getOverlayManager().getTilesOverlay().setColorFilter(null);

输出:

输入图像描述

在此处查看原始存储库

享受编码 :)


0

您可以使用MapBoxTileSource,将mapbox.streets-satellite作为MAPBOX_MAPID。您需要在MapBox网站上请求访问令牌。

OnlineTileSourceBase MAPBOXSATELLITELABELLED = new MapBoxTileSource("MapBoxSatelliteLabelled", 1, 19, 256, ".png");
((MapBoxTileSource) MAPBOXSATELLITELABELLED).retrieveAccessToken(this);
((MapBoxTileSource) MAPBOXSATELLITELABELLED).retrieveMapBoxMapId(this);
TileSourceFactory.addTileSource(MAPBOXSATELLITELABELLED);
mapView.setTileSource(MAPBOXSATELLITELABELLED);

同时在清单文件中:

    <meta-data
        android:name="MAPBOX_MAPID"
        android:value="mapbox.streets-satellite"/>
    <meta-data
        android:name="MAPBOX_ACCESS_TOKEN"
        android:value="... YOUR MAPBOX ACCESS TOKEN HERE ..."/>

0

谢谢,我不知道在谷歌地图中使用卫星视图的方法,但我们并没有使用谷歌地图,我们正在使用osmdroid,并且没有setMapType属性。我开始觉得如果不使用第三方工具(如bing),就无法使用卫星视图。 - Danstern

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接