Java 在Osmdroid中打开脱机磁贴

Java 在Osmdroid中打开脱机磁贴,java,android,Java,Android,我正在尝试使用osmdroid开发一个离线地图,并尝试使用从mobile atlas creator创建的mbtiles,但每次打开应用程序都会崩溃。这是我的主要活动代码。当我使用普通的jpg文件加载分幅时,它工作得很好,但没有用,因为我无法绑定贴图 package com.maptry.katgp; import java.io.File; import java.util.ArrayList; import org.osmdroid.DefaultReso

我正在尝试使用osmdroid开发一个离线地图,并尝试使用从mobile atlas creator创建的mbtiles,但每次打开应用程序都会崩溃。这是我的主要活动代码。当我使用普通的jpg文件加载分幅时,它工作得很好,但没有用,因为我无法绑定贴图

    package com.maptry.katgp;

    import java.io.File;
    import java.util.ArrayList;

    import org.osmdroid.DefaultResourceProxyImpl;
    import org.osmdroid.ResourceProxy;
    import org.osmdroid.api.IMapController;
    import org.osmdroid.tileprovider.IRegisterReceiver;
    import org.osmdroid.tileprovider.tilesource.XYTileSource;
    import org.osmdroid.util.BoundingBoxE6;
    import org.osmdroid.util.GeoPoint;
    import org.osmdroid.views.MapController;
    import org.osmdroid.views.MapView;
    import org.osmdroid.views.overlay.OverlayItem;

    import android.os.Bundle;
    import android.os.Environment;
    import android.app.Activity;

    public class MainActivity extends Activity implements IRegisterReceiver {
// initializing the mapview
MapView mapView;
// private MapController mapController;
 // ArrayList<OverlayItem> anotherOverlayItemArray;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // contents from the main

    setContentView(R.layout.activity_main);

    // connecting with the xml layout id

    mapView = (MapView) findViewById(R.id.mapView);

    // setting the default online tiles
    // mapnik not working so replaced by mapquest

    // for online use
    // mapView.setTileSource(TileSourceFactory.MAPQUESTOSM);

    //adding the offline tiles using mbtiles

     DefaultResourceProxyImpl resProxy;
        resProxy = new DefaultResourceProxyImpl(this.getApplicationContext());



        File file = new File(Environment.getExternalStorageDirectory(), "maptile.mbtiles");

        MBTileProvider provider = new MBTileProvider(this, file);
        BoundedMapView mapView = new BoundedMapView(this, resProxy, provider);

        double north = 27.749177;
        double east  =  85.382652;
        double south = 27.648864;
        double west  =  85.262489;
        BoundingBoxE6 bBox = new BoundingBoxE6(north, east, south, west);

        mapView.setScrollableAreaLimit(bBox);

    /*
     * // adding the offline tiles
     * 
     * mapView.setTileSource(new XYTileSource("MapQuest",
     * ResourceProxy.string.mapquest_osm, 13, 18, 256, ".jpg", new String[]
     * { "http://otile1.mqcdn.com/tiles/1.0.0/map/",
     * "http://otile2.mqcdn.com/tiles/1.0.0/map/",
     * "http://otile3.mqcdn.com/tiles/1.0.0/map/",
     * "http://otile4.mqcdn.com/tiles/1.0.0/map/" }));
     */

    // for zooming and multitouch controls

    mapView.setBuiltInZoomControls(true);
    mapView.setMultiTouchControls(true);

    mapView.setUseDataConnection(false);
     MapController controller = mapView.getController();
        controller.setZoom(12);
        controller.animateTo(new GeoPoint(27.7, 85.32));
}
package com.maptry.katgp;
导入java.io.File;
导入java.util.ArrayList;
导入org.osmdroid.DefaultResourceProxyImpl;
导入org.osmdroid.ResourceProxy;
导入org.osmdroid.api.IMapController;
导入org.osmdroid.tileprovider.IRegisterReceiver;
导入org.osmdroid.tileprovider.tilesource.XYTileSource;
导入org.osmdroid.util.BoundingBoxE6;
导入org.osmdroid.util.GeoPoint;
导入org.osmdroid.views.MapController;
导入org.osmdroid.views.MapView;
导入org.osmdroid.views.overlay.OverlayItem;
导入android.os.Bundle;
导入android.os.Environment;
导入android.app.Activity;
公共类MainActivity扩展活动实现IRegisterReceiver{
//初始化地图视图
地图视图;
//专用地图控制器;
//ArrayList另一个OverlayItemArray;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//主要内容
setContentView(R.layout.activity_main);
//与xml布局id连接
mapView=(mapView)findViewById(R.id.mapView);
//设置默认的联机分幅
//mapnik不工作,因此被mapquest取代
//供网上使用
//setTileSource(TileSourceFactory.MAPQUESTOSM);
//使用mbtiles添加脱机磁贴
DefaultResourceProxyImpl resProxy;
resProxy=newDefaultResourceProxyImpl(this.getApplicationContext());
File File=新文件(Environment.getExternalStorageDirectory(),“mappile.mbtiles”);
MBTileProvider=新的MBTileProvider(此文件);
BoundedMapView mapView=新的BoundedMapView(此、响应、提供程序);
双北=27.749177;
双东=85.382652;
双南=27.648864;
双西=85.262489;
BoundingBoxes6 bBox=新的BoundingBoxes6(北、东、南、西);
mapView.SetCrollableRealimit(bBox);
/*
*//添加脱机分幅
* 
*setTileSource(新的XYTileSource(“MapQuest”),
*ResourceProxy.string.mapquest_osm,13,18,256,“.jpg”,新字符串[]
* { "http://otile1.mqcdn.com/tiles/1.0.0/map/",
* "http://otile2.mqcdn.com/tiles/1.0.0/map/",
* "http://otile3.mqcdn.com/tiles/1.0.0/map/",
* "http://otile4.mqcdn.com/tiles/1.0.0/map/" }));
*/
//用于缩放和多点触摸控件
mapView.SetBuilTinZoomControl(真);
设置多点触控控件(真);
setUseDataConnection(false);
MapController=mapView.getController();
控制器。设置缩放(12);
控制器。动画(新的地质点(27.7,85.32));
}

}

我正在使用Osmdroid ZIP制作脱机分幅,效果很好,试试看,如果你真的需要它的全部细节,我将向你展示如何创建ZIP分幅+在你的appyes ZIP文件中使用它们对我来说也很好,但我在地图边界方面遇到了问题,即只显示特定区域,并去掉其他空块。