osmdroid - 更高的缩放级别?

Posted

技术标签:

【中文标题】osmdroid - 更高的缩放级别?【英文标题】:osmdroid - higher zoom level? 【发布时间】:2014-04-12 12:03:34 【问题描述】:

我正在尝试使用 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);


有没有进一步放大(我已经尝试将缩放级别设置为 18)?

【问题讨论】:

这为我解决了问题:***.com/questions/16222825/… 【参考方案1】:

最大缩放级别由您使用的平铺源决定。如果您使用的是提供的在线磁贴源之一,例如 MAPNIK,则最大缩放级别设置为 18,因为这是磁贴源为其创建磁贴的最大缩放级别。如果您想进一步放大,则需要使用提供更高缩放级别图块的图块源。

如果您只是想覆盖最大缩放级别而不考虑平铺源的缩放级别,那么您可以简单地调用:

mapView.setMaxZoomLevel(19);

将最大缩放级别设置为 19,但同样,平铺源可能没有该缩放级别的平铺。

【讨论】:

有没有提供高于 18 的缩放级别的图块提供商? @kurtzmarc 在我缩放到 19 级之前,如果已经加载了图块,它就可以工作。如果我在加载瓷砖之前缩放到 19 级,则不会加载瓷砖。有解决办法吗?【参考方案2】:

对于正在寻找更好的平铺缩放解决方案的任何人,osmdroid 现在带有内置函数,称为:

setTilesScaledDpi(boolean) 

该函数位于 MapView 类中。

【讨论】:

您可以使用 setTitleScaledDpi 方法后面的代码并根据需要调整“256”因子【参考方案3】:

我今天在使用新的 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);

根据屏幕密度改变比例是一个相对较好的解决方案,前提是您添加一些意外情况以防止图块变得过于模糊。

顺便说一句,这不是我的解决方案,我在Github 的 OSMDROID 问题中找到了它。感谢 stefangab95

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

【讨论】:

以上是关于osmdroid - 更高的缩放级别?的主要内容,如果未能解决你的问题,请参考以下文章

OSMDroid:缩放以显示整个 PathOverlay

osmdroid - 显示更大的图块

用 Osmdroid 捏合缩放

mapbox建筑显示不全

osmdroid 地图图块显示空白

根据不同的纬度和长度设置谷歌地图的缩放级别