1

我已经检查了这个答案,但是这个例子除了显示灰色瓷砖(我处于离线模式)之外什么也没做,因为缩放级别大于我给出的限制(在我的情况下为 4)......

OnlineTileSourceBase source = new XYTileSource("tiles", ResourceProxy.string.offline_mode, 0, 4, 256, ".png", "");

以下代码显示maxZoom=4

int zoomLevel = source.getMaximumZoomLevel();
Toast.makeText(this, "maxZoom=" + zoomLevel, Toast.LENGTH_SHORT).show();

对于 0 到 4 之间的缩放级别,我的代码按预期工作:它从 SD 卡加载地图图块。我对这个问题的理解是,代码显示了它找到的每个缩放的所有图块,当没有找到其他缩放时,它仍然会放大。

API 明确指定XYTileSource在(的构造函数中final int aZoomMaxLevel

public XYTileSource(final String aName, final string aResourceId, final int aZoomMinLevel,
                        final int aZoomMaxLevel, final int aTileSizePixels, final String aImageFilenameEnding,
                        final String... aBaseUrl)

任何解决方法?我究竟做错了什么?如何阻止缩放以使用户无法超过 4 级?

4

3 回答 3

10

该类MapView定义了公共函数getMaxZoomLevel()。一个简单的扩展MapView将让您覆盖该函数以返回您想要的任何内容,而无需将 osmdroid 源重新编译为 JAR:

public class ZoomLimitMapView extends MapView
{
    /* snip the constructors */

    @Override
    public int getMaxZoomLevel()
    {
        return 4;
    }
}

您不需要最小缩放级别,但如果您这样做,getMinZoomLevel()它也是公开的并且可以被覆盖。显然使用常量文字 4 可能是个坏主意;SharedPreferences除非您知道您的图像永远不会改变,否则最好动态加载。

于 2012-03-08T22:13:43.180 回答
3

我们找到了一种解决方法来为整个应用程序全局设置最大缩放级别。您必须在 osmdroid-android 项目的包 org.osmdroid.tileprovider.constants 中的文件 OpenStreetMapTileProviderConstants 中将值更改为所需的级别。这不是正确的方法,但对我们来说效果很好!:)

于 2012-01-05T17:39:19.743 回答
1

您可以在此处找到如何构建 jar 的详细说明

在 org.osmdroid.views.util.constants.MapViewConstants 和 org.osmdroid.tileprovider.constants.OpenStreetMapTileProviderConstants 中更改 MAXIMUM_ZOOMLEVEL 应该可以完成这项工作。

从 SVN http://osmdroid.googlecode.com/svn/branches/release_3_0_5获取 osmdroid 源代码 我推荐这个版本,因为它会更容易最终应用滚动限制补丁旁边的缩放限制。

于 2012-02-21T13:30:32.557 回答