我使用Openstreetmaps和OsmDroid构建了一个包含离线地图数据的Android APP。在MDPI为320x480像素的设备上,地图看起来没问题,但在具有480x800像素的HDPI屏幕的设备上,街道名称很小,读取起来有点困难。我的地图数据直到缩放级别18,我可以下载并使用Mapnik磁贴源的最大值,从SD卡加载为zip文件。我的当地地图来自布鲁塞尔(比利时)的一个特定地区。
具有320x480像素的MDPI设备的屏幕截图:
具有480x800像素的HDPI设备的屏幕截图:
如果您在设备上的应用中看到这些视图,则MDPI地图具有良好的可读性,在HDPI地图中,街道名称较小。
有没有办法让街道名称在HDPI设备上更具可读性,因此用户可以认为他在地图上进一步缩放了一步?因为它不可能转到缩放级别19,因为它没有openstreetmaps数据。所以一个简单的解决方案解决方案具有简单和小的实施时间/工作我对我来说没问题。现在通过在地图上滑动来缩放。如果您还需要代码,请告诉我,我会发布。
提前致谢。
氪
答案 0 :(得分:4)
Osmdroid适用于静态PNG图像的图块。您无法更改平铺图像。如果您想拥有更好的映射解决方案,请尝试使用MapsForge。此app /库使用地图数据并动态呈现它们。这样,您可以更好地控制渲染地图,并可以自定义其文本,字体和颜色。
答案 1 :(得分:3)
在这个答案中,我将解释一下我如何改变街道名称的大小。
在MapsForge的jar文件中,包含一个xml文件,该文件将用于渲染地图数据。您也可以通过查看服务器的源代码来下载此文件:http://mapsforge.googlecode.com或从此处下载xml文件:http://mapsforge.googlecode.com/svn/trunk/mapsforge-render-theme/src/main/resources/osmarender/osmarender.xml。所以,你有一个基本的调整你自己的渲染文件。我稍微调整了一下这个:
(xml文件的片段):
在MapsForgeRenderThemeAPI页面的Wiki页面上(在上面的站点上),您可以找到如何调整自己的渲染文件以及规则元素中的e,k,v属性的含义。正如你所看到的那样,规则元素e =“way”,k =“area”,v =“〜| no | false”在无规则路径规则元素内的某个地方,在rule-element的路上。此元素下的每个规则元素都有 e =“way”,k =“highway”,v值等于openstreetmap参数。当您登录openstreetmap.org上的编辑页面时,您可以找到想要调整名称的街道类型。
现在,我将告诉您如何为指定类型的街道精确填充所需的字体大小。作为一个例子,我将采取三级道路元素。每种方式rule-element都包含一些代码:
<rule e="way" k="highway" v="tertiary">
<line stroke="#ffff90" stroke-width="1.5" />
<rule e="way" k="*" v="*" zoom-min="14">
<pathText k="name" font-style="bold" font-size="32" stroke="#ffff90" stroke-width="2.0" />
</rule>
</rule>
线元素指定街道的显示方式(颜色,宽度,黑色边框,......)。 这里还有一个包含pathText元素的规则元素。此元素指定文本在笔划内的显示方式(颜色,宽度,字体大小......)。所以,这是我们需要的元素!在我的示例中,如您所见,三级道路的街道名称的字体大小将以32像素的大小显示,放大级别为14或更高。
现在我们要使用自己的渲染主题xml文件:
我在项目的assets文件夹中添加了自己的render-xml文件。比起t发射时间,我将文件复制到可以在需要时将其读出的位置。在处理mapforge映射的活动中,您只需通过实现此类代码(示例)链接到此文件:
File f = new File(Environment.getExternalStorageDirectory(), myRenderTheme.xml);
mapView.setRenderTheme(f);
请注意,setRenderTheme(File)将抛出FileNotFoundException。
所以,这就是用mapsforge改变街道名称的全部内容。您可以根据需要渲染整个地图!
感谢MapsForge开发社区。 p>
玩得开心!
氪