OSM地图,未使用自定义磁贴源

时间:2015-07-22 13:13:04

标签: java android osmdroid

我有以下代码:

public class MainActivity extends Activity {
    MapView map;
    XYTileSource customTileSource;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        map = (MapView) findViewById(R.id.mapView);
        map.setMultiTouchControls(true);
        map.setMapListener(new MyMapListener());
        ITileSource tileSource = TileSourceFactory.MAPNIK;
        String tileUrl[] = {"https://bla_bla_bla__don't wanna show this here"};
        customTileSource = new MyXYTileSource("Point", null, 8, 18, 256, ".png", tileUrl);
        map.setTileSource(customTileSource);

        GeoPoint startPoint = new GeoPoint(47.021461, 28.86383);
        IMapController mapController = map.getController();
        mapController.setCenter(startPoint);
        mapController.setZoom(10);

        MapEventsOverlay eventsOverlay = new MapEventsOverlay(this, new MyMapEventsListener());
        map.getOverlays().add(eventsOverlay);

    }

    private class MyMapListener implements MapListener {

        @Override
        public boolean onScroll(ScrollEvent event) {
            return false;
        }

        @Override
        public boolean onZoom(ZoomEvent event) {
            Log.d("atf", "Zoom level is: " + event.getZoomLevel());
            return true;
        }
    }

    private class MyMapEventsListener implements MapEventsReceiver {

        @Override
        public boolean singleTapConfirmedHelper(GeoPoint p) {
            Log.d("atf", "Taped on long="+p.getLongitude()+"  lat="+p.getLatitude());
            return true;
        }

        @Override
        public boolean longPressHelper(GeoPoint p) {
            return false;
        }
    }

    private class MyXYTileSource extends XYTileSource {

        public MyXYTileSource(String aName, ResourceProxy.string aResourceId, int aZoomMinLevel, int aZoomMaxLevel, int aTileSizePixels, String aImageFilenameEnding, String[] aBaseUrl) {
            super(aName, aResourceId, aZoomMinLevel, aZoomMaxLevel, aTileSizePixels, aImageFilenameEnding, aBaseUrl);
        }

        @Override
        public String getTileURLString(MapTile aTile) {
            String tileUrl = super.getTileURLString(aTile);
            Log.d("atf", "Tile url String: "+tileUrl);
            return tileUrl;
        }
    }
}

这样做的目的是使用自定义图块来显示地图。 这实际上工作正常。 除了此代码在"三星Galaxy Ace 3"上运行的情况。也许还有其他设备存在同样的问题。

对于低于17的缩放级别,它不会加载自定义图块。当变焦超过17时,它开始加载它们。

有人可以解释一下为什么吗?

抱歉,我忘了说明: 未加载新切片时,将加载旧切片(来自默认切片源)。所以地图不是完全空白的。

2 个答案:

答案 0 :(得分:0)

检查logcat是否有异常,也许有很多OutOfMemoryError。如果是这样,您需要微调您的应用内存使用情况。

答案 1 :(得分:0)

解决方案比我简单。这只是因为缓存。在问题中指定的设备上,我有另一个应用程序,它似乎使用相同的库“OSM Bonus Pack”。这两个应用程序都使用外部存储中的相同目录进行磁贴缓存。我只是删除了该目录(/ storage / emulated / 0 / osmdroid),并且我的应用程序开始加载新的磁贴。

也许更好的解决方案是为我的应用程序指定另一个用于切片缓存的目录。当然,在我发现如何做到这一点之前需要一些时间,但我不认为这会很复杂。