【问题标题】:How to change from "normal view" to "satellital view" with OSMDROID如何使用 OSMDROID 从“普通视图”更改为“卫星视图”
【发布时间】:2018-01-06 13:19:34
【问题描述】:

嗯,这就是问题所在,我认为可以做类似map.setSatellite(true); 的事情,但在 OSMdroid 中是不可能的。

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

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

【问题讨论】:

    标签: android maps osmdroid


    【解决方案1】:

    我知道发布此答案为时已晚,但对其他人来说,它会有所帮助

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

    为此,请使用以下代码 sn-p:

    在 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);
    

    输出:

    查看原始存储库here

    享受编码:)

    【讨论】:

      【解决方案2】:

      您可以使用 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 ..."/>
      

      【讨论】:

        【解决方案3】:

        您可以将此代码用于谷歌地图卫星视图

        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

        希望对你有帮助

        【讨论】:

        • 谢谢,我不知道在谷歌地图中使用卫星视图的方法,但我们没有使用谷歌地图,我们使用的是 osmdroid,并且没有 setMapType 属性。我开始认为如果不使用 bing 等第三方工具,就无法使用卫星视图。
        猜你喜欢
        • 1970-01-01
        • 2018-04-29
        • 2011-08-24
        • 2010-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多