如何在osmdroid中设置最大缩放?

时间:2012-01-03 17:41:44

标签: android maps osmdroid

我已经检查了this answer,但示例只是显示灰色瓷砖(我处于离线模式),缩放级别大于我给出的限制< / strong>(在我的情况下为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卡加载地图图块。我对这个问题的理解是代码显示了它找到的每个缩放的所有图块,当没有找到其他缩放时,它仍然会放大。

XYTileSource final int aZoomMaxLevel)的构造函数中的

The API clearly specifies setting the max zoom level

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

有任何变通方法吗?我究竟做错了什么?如何阻止缩放以使用户无法超越4级?

3 个答案:

答案 0 :(得分:10)

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

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

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

您可以在here

找到有关如何构建jar的详细信息

在org.osmdroid.views.util.constants.MapViewConstants中更改MAXIMUM_ZOOMLEVEL 和org.osmdroid.tileprovider.constants.OpenStreetMapTileProviderConstants 应该做的。

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