osmdroid - 更高的缩放级别?

时间:2014-03-09 12:44:05

标签: java android openstreetmap osmdroid

我正在尝试使用osmdroid库实现MapView。

然而,目前我似乎能够放大到最远的距离还不足以达到我的目的。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Setup map view:
    mapView = new MapView(this, 256);
    setContentView(mapView);

    // Parse parameters
    Intent intent = getIntent();

    center      = intent.getDoubleArrayExtra(INITIAL_CENTER);
    multiTouch  = intent.getBooleanExtra(MULTI_TOUCH, DEFAULT_MULTI_TOUCH);
    zoomButtons = intent.getBooleanExtra(ZOOM_BUTTONS, DEFAULT_ZOOM_BUTTONS);
    zoomLevel   = intent.getIntExtra(ZOOM_LEVEL, DEFAULT_ZOOM_LEVEL);

    if (center == null)
        center  = DEFAULT_INITIAL_CENTER;

    // Applying parameters
    mapView.setClickable(true);
    mapView.setMultiTouchControls(multiTouch);
    mapView.setBuiltInZoomControls(zoomButtons);
    mapView.getController().setZoom(zoomLevel);
    mapView.getController().setCenter(new GeoPoint(center[0], center[1]));
    mapView.setTileSource(TileSourceFactory.MAPQUESTOSM);
    mapView.setMaxZoomLevel(18);

    // Show current location coordinates
    Toast.makeText(
            getApplicationContext(),
            "Latitude:\t\t" + center[0] + "\n" +
            "Longitude:\t" + center[1],
            Toast.LENGTH_LONG).show();

    // Offline maps:
    mapView.setUseDataConnection(true);

}

enter image description here

无论如何都要进一步放大(我已经尝试将缩放级别设置为18)?

3 个答案:

答案 0 :(得分:12)

最大缩放级别由您正在使用的切片源确定。如果您使用其中一个提供的在线图块源(如MAPNIK),则最大缩放级别设置为18,因为这是图块源为其创建图块的最大缩放级别。如果您想进一步放大,则需要使用提供更高缩放级别图块的图块源。

如果您只是想覆盖最大缩放级别,而不管磁贴源的缩放级别如何,那么您只需调用:

mapView.setMaxZoomLevel(19);

将最大缩放级别设置为19,但瓷砖源可能只是没有该缩放级别的图块。

答案 1 :(得分:7)

对于任何寻求更好的磁贴缩放解决方案的人来说,osmdroid现在都带有内置函数,名为:

setTilesScaledDpi(boolean) 

该函数位于MapView类中。

答案 2 :(得分:4)

今天使用新的HTC One时遇到了类似的问题。由于屏幕密度非常高,最大缩放级别渲染地图图块的方式使得街道名称和位置几乎不可读(我正在使用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

编辑:如果屏幕密度太高,那么缩放图块也会产生使路径路径(使用RoadManager生成)不可见的负面影响。此问题已在OSMBonusPack web site - No Polyline drawn上记录为问题。目前还没有解决方案。