我正在使用osmdroid和从OSM下载到16级的地图。我想知道是否有任何方法可以让osmdroid使用该缩放级别的磁贴但是将其绘制得更大。
问题在于,那个级别的瓷砖对我来说有足够的细节,但是很小。我已经看到其他一些应用程序使用相同的磁贴级别,但不知何故设法将它们绘制得更大。
由于
答案 0 :(得分: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);
根据屏幕密度改变比例是一个相对好的解决方案。在我的测试过程中,一些图像变得有些模糊,但是如果你减少那个意外事件的比例,你会得到一个非常好的结果。
这不是我的解决方案BTW,我在Github的OSMDROID问题中找到了它。谢谢 stefangab95 。
答案 1 :(得分:3)
如果不修改osmdroid的源代码,就无法做到这一点。现在,除非在缩放级别之间对视图进行动画处理,否则会以实际分辨率显示切片。也就是说,在动画完成时切换切片,并且比例再次设置为1。当用户尝试缩放超出最高级别的细节时,我尝试了一些技巧来保持缩放。它在视觉上有效,但是从像素映射到地图坐标的所有功能,以及拖动地图时的一些交互都会中断。因此,需要对源进行更重要的修改。这是可行的,但我认为这不值得麻烦 - 除非你真的想要对项目做出修改,并以一种不那么强硬的方式来做。
答案 2 :(得分:2)
我正在使用离线图块,只是这样做以2倍分辨率显示它们。重要的部分是512像素大小,即使瓷砖是256。
myMapView.setTileSource (new XYTileSource ("Mapnik", ResourceProxy.string.offline_mode, 13, 17, 512, ".png", "http://127.0.0.1"));
答案 3 :(得分:2)
mMapview.setTilesScaledToDpi(真)
应该做的伎俩
答案 4 :(得分:1)
Cloudmade支持高分辨率的瓷砖,现在市场上现有的手机看起来要好得多。看看这里:
http://developers.cloudmade.com/projects/tiles/documents
我会将普通磁贴用于ldpi和mdpi设备,并将高分辨率磁贴用于hdpi和xhdpi设备
答案 5 :(得分:1)
要完全解决您的问题,有两种方法。 第一个是您可以通过类似mapnik的软件自己生成或渲染地图图块。 第二个是在mapforge等手机上使用基于矢量的实时渲染器。 配置文件或样式文件是这两种方法的关键。
答案 6 :(得分:0)
您可以使用其他磁贴源,例如M $ Bing。这也有更大的街道名称。
答案 7 :(得分:-1)
保留在OSMdroid当前工作模型中的一种解决方法是使用ImageMagick或Photoshop等图像处理软件包,以更高的缩放级别创建一组新的位图图块。
您需要做的是拍摄每个当前图块(256x256像素),调整大小,将图像的大小和宽度加倍,然后将图像切割成4个新图块。根据新缩放级别的命名约定保存每个切片。 tile map命名对象是described here, as well as an easy way of getting the 4 new names from the original name