6

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

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

谢谢

4

8 回答 8

4

我发现这个问题的最佳解决方案(我今天早些时候遇到过)是更改平铺源中的缩放比例(我使用的是我自己的 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

于 2014-09-10T08:38:09.523 回答
3

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

于 2011-11-24T09:47:47.947 回答
3

mMapview.setTilesScaledToDpi(true)

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

这应该可以解决问题

于 2016-01-03T13:35:51.310 回答
2

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

myMapView.setTileSource  (new XYTileSource ("Mapnik", ResourceProxy.string.offline_mode, 13, 17, 512, ".png", "http://127.0.0.1"));
于 2013-11-02T23:11:58.463 回答
1

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

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

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

于 2012-06-08T11:43:22.163 回答
1

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

于 2013-08-09T10:38:44.950 回答
0

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

于 2012-08-08T17:57:30.860 回答
-1

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

您需要做的是获取每个当前图块 (256x256px),调整它的大小,将大小和宽度加倍,然后将图像切割成 4 个新图块。根据新缩放级别的命名约定保存每个图块。这里描述了瓦片地图命名惯例,以及从原始名称中获取 4 个新名称的简单方法

于 2012-03-22T05:16:20.487 回答