【问题标题】:Empty grid on OpenStreetMapOpenStreetMap 上的空网格
【发布时间】:2017-09-17 00:39:44
【问题描述】:

我的活动中只有一个空网格。我在清单中添加了写入外部存储权限: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

我的活动:

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

    setContentView(R.layout.activity_osm_map);

    if(isStoragePermissionGranted()){
        initMap();
    }
}

private void initMap(){
    MapView map = (MapView) findViewById(R.id.osm_map);
    final float scale = getBaseContext().getResources().getDisplayMetrics().density;
    final int newScale = (int) (256 * scale);
    String[] OSMSource = new String[1];
    OSMSource[0] = "https://gps.4u.uz/";
    map.setTileSource(new OnlineTileSourceBase("USGS Topo", null, 1, 18, 256, "", OSMSource) {
        @Override
        public String getTileURLString(MapTile aTile) {
            return getBaseUrl() + aTile.getZoomLevel() + "/" + aTile.getY() + "/" + aTile.getX()
                    + mImageFilenameEnding;
        }
    });

    map.setBuiltInZoomControls(true);
    map.setMultiTouchControls(true);

    MapController mapController = (MapController) map.getController();
    mapController.setZoom(13);

    GeoPoint geoPoint = new LatLonPoint(41.63, 64.59);

    OverlayItem myLocationOverlayItem = new OverlayItem("Here", "Current Position", geoPoint);
    Drawable myCurrentLocationMarker = this.getResources().getDrawable(R.drawable.ic_marker);
    myLocationOverlayItem.setMarker(myCurrentLocationMarker);

    final ArrayList<OverlayItem> items = new ArrayList<>();
    items.add(myLocationOverlayItem);

    CustomOverLay overlays = new CustomOverLay(myCurrentLocationMarker, map, this);
    OverlayItem overlayItem = new OverlayItem("Title", "Snippet", geoPoint);
    overlays.addOverlayItem(overlayItem);

    map.getOverlays().add(overlays);

    DisplayMetrics displayMetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

    int width = displayMetrics.widthPixels;
    int height = displayMetrics.heightPixels;
    map.setBottom(height);
    map.setRight(width);
    mapController.setCenter(geoPoint);
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
        Log.d(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]);
        initMap();
        //resume tasks needing this permission
    }else{
        Log.d(TAG, "permission dined after requesting");
    }
}

private static int REQUEST_CODE = 1;

public  boolean isStoragePermissionGranted() {
    if (Build.VERSION.SDK_INT >= 23) {
        if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
            return true;
        } else {
            Log.d(TAG, "Permission is revoked");
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
            return false;
        }
    } else {
        Log.d(TAG,"Permission is granted");
        return true;
    }
}

当我发现运行时的权限请求解决了问题时,我决定添加它。但它并没有解决问题。

有趣的是 osmdroid 文件位于内部存储,而不是外部。我只有 cache.db 和 cache.db-journal 文件。正如我所读到的,osmdroid 需要外部存储来存储缓存。我试过OpenStreetMapTileProviderConstants.setCachePath(this.getFilesDir().getAbsolutePath());。但是没有这样的方法。这就是我删除这条线的原因。而且我不能使用this pitch

我使用的是osmdroid 4.2版本

【问题讨论】:

    标签: android osmdroid


    【解决方案1】:

    在加载地图之前,您需要获得许可。如果你以后再做,那就太晚了。在您的示例中,地图是在布局膨胀时创建的。

    也就是说,我还没有测试这个工作,但基本上在设置权限后,您可以使用以下方法重置地图瓷砖提供者:

    mMapView.setTileProvider(new MapTileProviderBasic(getContext()));
    

    这可能会解决您的问题,否则,您必须在创建地图视图之前请求许可。

    哦,那个示例代码,可能需要 osmdroid 4.4

    【讨论】:

    • 您是否考虑过尝试更新版本?那个已经有 3 年以上的历史了,从那时起图书馆就有了很多新的功能。尤其是缓存管理。
    • 对于灰色网格,您是否尝试过放大?
    猜你喜欢
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 2017-12-14
    相关资源
    最近更新 更多