2011-08-30 115 views
6

我使用osmdroid和从OSM下载到16级的地图。我想知道是否有任何方法可以让osmdroid使用该缩放级别的瓷砖,但将其拉大。osmdroid - 显示瓷砖更大

事情是那个水平上的瓷砖对我来说有足够的细节,但是被拉得很小。我已经看到其他一些应用程序使用相同的图块级别,但设法将它们拉大。

感谢

回答

3

你不能在不修改osmdroid的源代码做到这一点。现在,除非视图在缩放级别之间进行动画,否则将以实际分辨率显示切片。也就是说,当动画完成时切换切片,并将比例再次设置为1。我尝试了一些技巧来保持缩放时用户尝试缩放超过最高级别的细节。它可以直观地工作,但是从像素映射到地图坐标的所有功能以及拖动地图时的一些交互都会中断。因此需要对来源进行更重大的修改。这是可行的,但我认为这并不是真正值得的麻烦 - 除非你真的想要对项目进行修改,并以一种不太冒犯的方式来做。

-1

停留在OSMdroid当前工作模型中的一种解决方法是使用ImageMagick或Photoshop等图像处理软件包以较高缩放级别创建一组新的位图切片。

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

+0

这将导致下一个较高的缩放级别基本上是复制的瓷砖。 –

+0

从某种意义上说,它仍然达到了预期的效果。 – CjS

1

Cloudmade支持高分辨率的瓷砖,在市场上现有的手机上看起来更好。看看这里:

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

我会用普通瓷砖的LDPI和MDPI设备,并使用高分辨率药粥华电国际和xhdpi设备

+0

看起来这个项目已经不再适合小型开发人员了:http://notes.ericjiang.com/posts/741 – elcuco

0

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

1

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

2

我使用的是离线贴图,只是做了这个以2x分辨率显示它们。最重要的部分是512像素的尺寸即使瓦片256

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

由于瓦片大小不同,osmdroid如何计算实际的瓦片坐标? – hguser

+0

如果图块的大小是256x256,并且您将图块源设置为512,那么它将只是图块大小的两倍。我实际上更喜欢现在通过osmdroid在webview中放置Leaflet。 –

3

最好的解决办法,我发现这个问题(这是我今天早些时候有我自己),是改变在瓦源缩放(我用我自己的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