如何使用OSMDROID从“普通视图”更改为“卫星视图”

问题描述 投票:0回答:3

好吧,这就是问题,我认为可以做类似

map.setSatellite(true);
的事情,但在 OSMdroid 中是不可能的。

还有一个麻烦是能不能下载地图,因为我需要离线工作,老板说应该可以下载地图。 我知道使用离线地图的唯一方法是用mobac制作地图,然后手动存储以供参考。

我读过一些有关使用 bing 的内容,但我不确定,你知道另一种方法吗?,我想我需要在线才能使用 bing 库。我说得对吗?

android maps osmdroid
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;
    }
}

最后在mapview中设置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);

输出:

查看原始存储库这里

享受编码的乐趣:)


1
投票

您可以使用MapBoxTileSource,并将satellite-streets-v12用作MAPBOX_MAPID。 您必须在 MapBox 网站上请求访问令牌。

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

在清单中:

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

0
投票

您可以使用此代码进行谷歌地图卫星视图

getMap().setMapType( GoogleMap.MAP_TYPE_SATELLITE );

您也可以从此链接参考来实现谷歌地图

https://code.tutsplus.com/tutorials/getting-started-with-google-maps-for-android-basics--cms-24635

对于谷歌地图下载,您可以使用此参考 https://stackoverflow.com/a/19184812/6869491

希望对你有帮助

© www.soinside.com 2019 - 2024. All rights reserved.