osmdroid - 显示更大的图块

Posted

技术标签:

【中文标题】osmdroid - 显示更大的图块【英文标题】:osmdroid - display tiles bigger 【发布时间】:2011-11-06 14:55:05 【问题描述】:

我正在使用 osmdroid 和从 OSM 下载到 16 级的地图。我想知道是否有任何方法可以让 osmdroid 使用该缩放级别的图块,但将其绘制得更大。

问题是那个级别的瓷砖对我来说有足够的细节,但被画得很小。我见过其他一些应用使用相同的磁贴级别,但不知何故设法将它们绘制得更大。

谢谢

【问题讨论】:

【参考方案1】:

我发现这个问题的最佳解决方案(我今天早些时候自己遇到过)是更改平铺源中的缩放比例(我使用的是我自己的 OpenStreetMap 版本):

final float scale = getBaseContext().getResources().getDisplayMetrics().density;
final int newScale = (int) (256 * scale);
String[] OSMSource = new String[2];
OSMSource[0] = "http://a.tile.openstreetmap.org/";
OSMSource[1] = "http://b.tile.openstreetmap.org/";  
XYTileSource MapSource = new XYTileSource(
        "OSM", 
        null, 
        1, 
        18, 
        newScale,
        ".png", 
        OSMSource
); 
map.setTileSource(MapSource);

根据屏幕密度改变比例是一个比较好的解决方案。在我的测试过程中,一些图像变得有点模糊,但如果你减少这种意外情况的缩放比例,你会得到一个非常好的结果。

顺便说一句,这不是我的解决方案,我在Github 的 OSMDROID 问题中找到了它。感谢 stefangab95

【讨论】:

【参考方案2】:

如果不修改 osmdroid 的源代码,你就无法做到这一点。现在,除了视图在缩放级别之间进行动画处理时,图块以其实际分辨率显示。也就是在动画完成后切换tiles,再次将scale设置为1。当用户尝试缩放超出最高细节级别时,我尝试了一些技巧来保持缩放。它在视觉上工作,但从像素映射到地图坐标的所有功能,以及拖动地图时的一些交互,都会中断。因此,这将需要对源进行更重大的修改。这是可行的,但我认为这并不值得麻烦——除非你真的想为项目贡献修改,并且以一种不那么骇人听闻的方式来做。

【讨论】:

【参考方案3】:

mMapview.setTilesScaledToDpi(true)

https://github.com/osmdroid/osmdroid/blob/master/osmdroid-android/src/main/java/org/osmdroid/views/MapView.java#L307

这应该可以解决问题

【讨论】:

【参考方案4】:

我正在使用离线磁贴,只是这样做是为了以 2 倍分辨率显示它们。重要的部分是 512 像素大小,即使图块是 256。

myMapView.setTileSource  (new XYTileSource ("Mapnik", ResourceProxy.string.offline_mode, 13, 17, 512, ".png", "http://127.0.0.1"));

【讨论】:

不同瓦片大小,osmdroid如何计算真实瓦片坐标? 如果图块是 256x256 并且您将 tilesource 设置为 512,它只会使图块大小加倍。实际上,我现在更喜欢将 Leaflet 放在 webview 中而不是 osmdroid。【参考方案5】:

Cloudmade 支持高分辨率磁贴,这些磁贴在目前市场上的手机上看起来要好得多。看看这里:

http://developers.cloudmade.com/projects/tiles/documents

我会对 ldpi 和 mdpi 设备使用普通磁贴,而对 hdpi 和 xhdpi 设备使用高分辨率磁贴

【讨论】:

这个项目似乎不再为小型开发者维护:notes.ericjiang.com/posts/741【参考方案6】:

要彻底解决您的问题,有两种方法。 第一个是您可以通过类似 mapnik 的软件自己生成或渲染地图图块。 第二种是在手机上使用基于矢量的实时渲染器,例如 mapsforge。 配置文件或样式文件是这两种方法的关键。

【讨论】:

【参考方案7】:

您可以使用不同的磁贴源,例如 M$ Bing。这也有更大的街道名称。

【讨论】:

【参考方案8】:

保留在 OSMdroid 当前工作模型中的一种解决方法是使用 ImageMagick 或 Photoshop 之类的图像处理包以更高的缩放级别创建一组新的位图图块。

您需要做的是获取每个当前图块 (256x256px),调整它的大小,将大小和宽度加倍,然后将图像切割成 4 个新图块。根据新缩放级别的命名约定保存每个图块。瓦片图命名约定为described here, as well as an easy way of getting the 4 new names from the original name

【讨论】:

这将导致在下一个更高的缩放级别复制图块。 某种意义上,但还是达到了预期的效果。

以上是关于osmdroid - 显示更大的图块的主要内容,如果未能解决你的问题,请参考以下文章

Osmdroid 地图图块不显示

Osmdroid:如何从我自己的位图(图块)创建和加载地图?

我可以在 osmdroid 中使用 Google 地图图块吗?

如何在用户端下载 osmdroid 瓦片?

下载特定的地图以缓存在 OSMDroid 中

OsmDroid 显示带有块的空白屏幕