Android Mapview 缩放级别 - 自定义切片服务器

Android Mapview Zoom Level - Custom Tile Server

我创建了一个 Android 移动应用程序,它使用 OSMDroid Mapview。它从 18 以下的缩放级别加载完美。但是它只会重新缩放并且从不为我提供 19 及以下的图块。

我有自己的图块服务器,使用 Mapnik、Renderd、Mod_tile 等等。我也将我的应用程序设置为使用我自己的磁贴服务器。使用 .../osm_tiles/{zoom}/{x}/{y} 我知道它会下降到 20 级,正如我设置的那样。它根本无法提供给我的移动设备。

我注意到一段时间后,缓存在我的手机 phone 上的图块趋于 "mix",其中一些加载了默认的 MAPNIK。这导致我的地图在某些地方看起来很奇怪。

编辑:感谢所有给我提示和建议的人。删除磁贴重新下载后,就不再混了!当我查看我的代码时,我没有看到任何名称的混合,但我很确定在某些时候我一定犯了将它们命名为相同的错误。

但是,它仍然不会低于 18 级。不过,这是我在代码中设置的内容:

ITileSource tileSource;
tileSource = new XYTileSource("custom", ResourceProxy.string.mapnik, 16, 20, 256, ".png", custom);
    TileSourceFactory.addTileSource(tileSource);

经过检查,磁贴确实减少到 20 个,mod_tile 当我从 Web 浏览器访问它时,它们会被提供。查看 Android 监视器(使用 Android Studios Preview 4)我看到它在更高级别下载和获取图块,但一旦它下降到 19,所有这些都停止获取。

这里发生了一些不同的事情。

1) 在缩放级别大于可用图像时,osmdroid 将缩放最后查看的图块(将其拉伸以使其变大)。这会产生放大的错觉,并且通常会在加载新图块时立即替换。这是一个主要在缩放级别之间的动画期间使用的功能。在这种情况下,您根本无法获得 19 级以上的板块。在为您的应用配置 osmdroid 时,您是否告诉它地图源 (ITileSource) 支持更高的缩放级别?此外,您可能希望打开调试并查看日志以查看是否尝试下载 > 18 个磁贴。

2) 您是否确认切片服务器确实会在缩放>18 时生成切片? osmdroid 应该上升到 22 左右。很难测试,因为很少有地图源提供该级别的图像。

3) 拼贴。使用自定义图块源时,请始终确保您告诉 osmdroid 的图块源 "Name" 在某种程度上是独一无二的。如果您将 "MAPNIK" 用于 bing 并使用 "MAPNIK" 用于 mapquest,那么在查看任何一个时,您最终都会发现来自两个来源的图块不匹配。修复它的唯一方法是清除 tile catch,通常是 /sdcard/osmdroid/tiles/

首先,通过删除和re-downloading瓷砖解决了混合瓷砖的问题,不再混合!当我查看我的代码时,我没有看到任何名称的混合,但我很确定在某些时候我一定犯了将它们命名为相同的错误。感谢 Spy 指出。

因此只需插入您的 android phone,查找名为 "osmdroid" 的文件夹并相应地删除图块。

接下来,我好像忘了添加行

mv.setTileSource(TileSourceFactory.getTileSource("private"));

创建源并添加后,我还需要专门在我的地图视图上进行设置。它以前不会超过 18 级并下载磁贴,因为它使用的是默认的 OSM 磁贴源! :)