【问题标题】:OSMDroid - how to set two tile source?OSMDroid - 如何设置两个瓦片源?
【发布时间】:2020-08-04 12:36:39
【问题描述】:

我尝试使用 osmdroid 实现 OSM,到目前为止我能够正确地做所有事情。但我想知道如何将两个平铺源设置在彼此之上。

以下是我尝试实现的方式:

map = (MapView) findViewById(R.id.map);
        map.getTileProvider().getTileCache().getProtectedTileComputers().clear();
        map.getTileProvider().getTileCache().setAutoEnsureCapacity(false);
        map.setTileSource(TileSourceFactory.MAPNIK);

        map.setTileSource(new OnlineTileSourceBase("USGS Topo", 0, 18, 256, ".png?apikey=123",
                new String[] { "https://api.xyz.com/maps/satellite/zxy/2020-04-21T16:10:00Z/" }) {
            @Override
            public String getTileURLString(long pMapTileIndex) {
                return getBaseUrl()
                        + MapTileIndex.getZoom(pMapTileIndex)
                        + "/" + MapTileIndex.getY(pMapTileIndex)
                        + "/" + MapTileIndex.getX(pMapTileIndex)
                        + mImageFilenameEnding;
            }
        });
        map.setVerticalMapRepetitionEnabled(false);

到目前为止,我的输出低于输出,但卫星图块源下没有 mapnik 源。

但我需要输出看起来像这样

我如何做到这一点?

【问题讨论】:

    标签: java android openstreetmap osmdroid


    【解决方案1】:

    如wiki docs on osmdroid's GitHub page 中所述,您一次可以使用多个磁贴源。

    您只能设置一个setTileSource,因此您需要将地图设置为瓦片源并添加天气瓦片图层作为其上的叠加层。

         map = (MapView) findViewById(R.id.map);
         map.getTileProvider().getTileCache().getProtectedTileComputers().clear();
         map.getTileProvider().getTileCache().setAutoEnsureCapacity(false);
         map.setTileSource(TileSourceFactory.MAPNIK);
    
         MapTileProviderBasic provider = new MapTileProviderBasic(MainActivity.this, new OnlineTileSourceBase("USGS Topo", 0, 18, 256, "png?apikey=123", new String[0]) {
            @Override
            public String getTileURLString(MapTile aTile) {
                // BoundingBox bbox = tile2boundingBox(aTile.getX(), aTile.getY(), aTile.getZoomLevel());
                // String baseUrl ="https://api.xyz.com/maps/satellite/zxy/2020-04-21T16:10:00Z/?dpi=96&transparent=true&format=png24&bbox="+bbox.west+","+bbox.south+","+bbox.east+","+bbox.north+"&size=256,256&f=image";
                return "https://api.xyz.com/maps/satellite/zxy/2020-04-21T16:10:00Z/" + aTile.getZoomLevel() + "/" + aTile.getY() + "/" + aTile.getX();
                // return baseUrl;
            }
        });
    
        TilesOverlay layer = new TilesOverlay(provider, MainActivity.this);
        layer.setLoadingBackgroundColor(Color.TRANSPARENT);
        layer.setLoadingLineColor(Color.TRANSPARENT);
        map.getOverlays().add(layer);
    
        map.setVerticalMapRepetitionEnabled(false);
    

    如果您使用的是 osmndroid-wms,那么您也可以通过更改以下行来使用地图层和覆盖层

      MapTileProviderBasic provider = new MapTileProviderBasic(MainActivity.this, mWMSTileSource)
    

    这里的mWMSTileSource 将是您在发出call to the WMS server as mentioned in the wiki 后从WMSTileSource.createFrom(WMSEndpoint endpoint, WMSLayer layer) 得到的回复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-02
      • 1970-01-01
      • 2014-02-19
      • 2012-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多