我已经检查了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级?
答案 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源代码 我推荐这个版本,因为它会更容易在缩放限制旁边应用滚动限制补丁。