【问题标题】:TileOverlay#getTile starts at zoom level 3TileOverlay#getTile 从缩放级别 3 开始
【发布时间】:2023-04-08 09:46:01
【问题描述】:

我正在尝试使用 Google Maps Android SDK 构建带有自定义图块的地图。我查看了android-samples Github 存储库的TileOverlayDemoActivity

根据documentation,在缩放级别 0 将请求单个图像,在缩放级别 1 将请求总共 4 个图像,依此类推。目前我面临的问题是,在加载地图后立即 TileProvider#getTitle以缩放级别 3 调用 并且我无法缩小。即使我显示缩放控件,“-”也被禁用。

我尝试过的

我认为它可能与Camera 有关,所以我尝试调用以下代码

map.moveCamera(CameraUpdateFactory.zoomTo(0.0f));

很遗憾,这没有任何效果。以下内容也一样

map.setMinZoomPreference(0);

目前我不知道问题可能是什么。

按照我的代码。它与我刚刚将UrlTileProvider 更改为我自己的链接演示活动中的基本相同。

@Override
public void onMapReady(GoogleMap map) {
    map.setMapType(GoogleMap.MAP_TYPE_NONE);
    map.setMinZoomPreference(0);
    map.getUiSettings().setZoomControlsEnabled(true);
    map.moveCamera(CameraUpdateFactory.zoomTo(0.0f));

    TileProvider tileProvider = new TileProvider() {
        @Override
        public Tile getTile(int x, int y, int zoom) {
            String name = "tile_" + Integer.toString(zoom) + "_" + Integer.toString(x) + "_" + Integer.toString(y);
            Resources resources = getResources();
            final int resourceId = resources.getIdentifier(name, "drawable", getPackageName());

            Drawable d = getResources().getDrawable(resourceId);
            Bitmap bitmap = ((BitmapDrawable) d).getBitmap();
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
            byte[] bitmapdata = stream.toByteArray();

            return new Tile(256, 256, bitmapdata);
        }
    };

    mapTiles = map.addTileOverlay(new TileOverlayOptions().tileProvider(tileProvider));
}

也许值得一提的是map.getCameraPosition() 的返回值:

CameraPosition{target=lat/lng: (0.0,0.0), zoom=2.0, tilt=0.0, bearing=0.0}

tl;博士

如何将地图设置为 0 级缩放?

编辑

根据评论和回答我尝试激活Lite Mode并通过XML设置缩放级别:

<fragment
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    map:cameraZoom="1"
    map:mapType="normal"
    class="com.google.android.gms.maps.SupportMapFragment" />

很遗憾没有任何效果。它仍然以缩放级别 3 开始请求。

【问题讨论】:

  • 有没有尝试在SupportMapFragment的xml中设置?
  • 刚做了,可惜也没用。
  • 您在精简模式的 XML 片段中错过了 map:liteMode="true"
  • 糟糕,我的错。使用此属性,它似乎缩小了,但缩放本身不再起作用。我想这就是您在评论中关于“精简模式不适用于 TileProvider 的意思。

标签: android google-maps google-maps-android-api-2


【解决方案1】:

似乎不可能将缩放级别设置为 0,因为最小缩放级别为 1 from documentation

以下列表显示了您可以了解的大致详细程度 期望在每个缩放级别看到:

1: World
5: Landmass/continent
10: City
15: Streets
20: Buildings

也来自文档:

注意:由于屏幕尺寸和密度,某些设备可能不支持 最低缩放级别。使用GoogleMap.getMinimumZoomLevel() 获取 地图可能的最小缩放级别。如果您需要显示 整个世界都在视口中,最好使用Lite Mode

所以,使用Lite Mode 在视口中显示整个世界。

【讨论】:

  • 我不得不承认这一切听起来很有希望,不幸的是它不起作用。 #getMinZoomLevel 返回 0.0f。将缩放级别设置为 1.0f 无效 - LiteMode 也是如此。
  • @user3420815 它绝对适用于精简模式(请参阅this),但 Tile Provide 不适用于精简模式。
猜你喜欢
  • 2022-10-07
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多