代码之家  ›  专栏  ›  技术社区  ›  jshbrntt

锇机器人-更高的缩放级别?

  •  11
  • jshbrntt  · 技术社区  · 12 年前

    我正在尝试使用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 回复  |  直到 12 年前
        1
  •  13
  •   kurtzmarc    12 年前

    最大缩放级别由您使用的平铺源确定。如果您使用的是提供的在线平铺源之一(如MAPNIK),则最大缩放级别设置为18,因为这是平铺源创建平铺的最大缩放级别。如果要进一步放大,则需要使用提供更高缩放级别平铺的平铺源。

    如果您只想覆盖最大缩放级别,而不考虑平铺源的缩放级别,那么您只需调用:

    mapView.setMaxZoomLevel(19);
    

    将最大缩放级别设置为19,但平铺源可能只是没有处于该缩放级别的平铺。

        2
  •  8
  •   Manos Nikolaidis Airsource Ltd    10 年前

    对于任何寻求更好的瓷砖缩放解决方案的人,osmdroid现在提供了内置函数,名为:

    setTilesScaledDpi(boolean) 
    

    该函数位于MapView类中。

        3
  •  4
  •   Steven    11 年前

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

    根据屏幕密度改变比例是一个相对较好的解决方案,前提是您可以添加一些应急措施以防止瓷砖变得过于模糊。

    顺便说一下,这不是我的解决方案,我在OSMDROID问题中发现了它 Github 。谢谢 stefangab95型 .

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