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:如何从我自己的位图(图块)创建和加载地图?