Java 在Osmdroid中打开脱机磁贴
我正在尝试使用osmdroid开发一个离线地图,并尝试使用从mobile atlas creator创建的mbtiles,但每次打开应用程序都会崩溃。这是我的主要活动代码。当我使用普通的jpg文件加载分幅时,它工作得很好,但没有用,因为我无法绑定贴图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
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文件中使用它们对我来说也很好,但我在地图边界方面遇到了问题,即只显示特定区域,并去掉其他空块。