Java:使用联机位图图块而不是脱机渲染器时缩放地图伪造地图

2022-09-01 14:49:12

我使用MapsForge 0.8在我的Android应用程序中显示地图。使用联机磁贴(只是位图,而不是可在运行时渲染器中调整的矢量数据)时,该地图在我的高分辨率设备上非常小,我无法读取任何内容。

screenshot

我想缩放地图,我尝试了以下方法:

mapView.getModel().displayModel.setDefaultUserScaleFactor(2.0f);

和:

mapView.getModel().displayModel.setUserScaleFactor(2.0f);

但它不会改变任何东西。
如何使它显示地图更大?

更新:

我不是说放大。我的意思是缩放当前的缩放级别,使其在高分辨率设备上可读。想象一下上面的屏幕截图在小型智能手机上 - 它很小。我甚至看不懂街道名称。

第 2 次更新

下面的当前答案没有回答这个问题。这是关于缩放作为位图的在线切片 - 而不是如何影响矢量数据的呈现。

第三次更新

接受的答案终于解决了问题!


答案 1

根据本文档,(阅读指定位置部分),您可以指定要显示的区域和缩放级别。

this.mapView.setCenter(new LatLong(52.517037, 13.38886));
this.mapView.setZoomLevel((byte) 12);

上述解决方案将按照官方文档中提供的方式工作。

除此之外,我还对此进行了搜索,发现我们还可以像MapViewPosition一样将MapPosition设置为MapViewPosition(请参阅此链接)。

MapPosition mapPosition1 = new MapPosition(new LatLong(52.517037, 13.38886), (byte) 12);
this.mapView.getModel().mapViewPosition.setMapPosition(mapPosition1);

希望这会帮助你。


答案 2

在mapsforge中有很多“缩放”的方法。
本示例所示,您可以尝试直接缩放模型,而不是缩放模型。
如果这是您所要求的,请尝试以下操作:.zoom()mapViewPosition

法典:

MapViewPosition mapViewPosition = mapView.getModel().mapViewPosition; 
mapViewPosition.zoom((byte) XX); // Change it to a number (i.g. "(byte) 3")

我甚至看不懂街道名称。

但是,如果您正在谈论UI文本,则可以尝试像这样更改它:

mapView.setTextScale(XX); // Again, number goes here

如果只有文本大小对您来说还不够,您可以尝试创建一个新的渲染主题。
文档示例:

法典:

tileRendererLayer.setXmlRenderTheme(new ExternalRenderTheme(File)) // File should be
                                                 // the XML file for the RenderTheme

XML:

<?xml version="1.0" encoding="UTF-8"?>
    <rendertheme xmlns="http://mapsforge.org/renderTheme" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://mapsforge.org/renderTheme renderTheme.xsd" version="1">

    <!-- matches all ways with a "highway=trunk" or a "highway=motorway" tag -->
    <rule e="way" k="highway" v="trunk|motorway">
        <line stroke="#FF9900" stroke-width="2.5" />
    </rule>

    <!-- matches all closed ways (first node equals last node) with an "amenity=…" tag -->
    <rule e="way" k="amenity" v="*" closed="yes">
        <area fill="#DDEECC" stroke="#006699" stroke-width="0.3" />
    </rule>

    <!-- matches all nodes with a "tourism=hotel" tag on zoom level 16 and above 
-->
    <rule e="node" k="tourism" v="hotel" zoom-min="16">
        <symbol src="file:/path/to/symbol/icon/hotel.png" />
        <caption k="name" font-style="bold" font-size="10" fill="#4040ff" />
    </rule>
</rendertheme>

推荐