我想问一下渲染在线瓦片和离线地图有什么区别。
我有以下代码,当我使用离线地图中的切片渲染层时,它运行成功。但是,如果我使用 tileDownloadLayer,它就不起作用。
下面是它不起作用的代码。使用 tileDownloadLayer 仅显示灰色图层而不是地图图块。
private static final String MAP_FILE = "hongkong_cycle.map"; // name of the map file in the external storage
private static MapDataStore mapDataStore = new MapFile(Environment.getExternalStoragePublicDirectory("lab.geospatial.maps").toString() + "/" + MAP_FILE);
private MapView mapView;
private TileRendererLayer tileRendererLayer;
private TileCache tileCache;
private Layer sketchLayer;
private MyLocationOverlay myLocationOverlay;
private LatLong MY_INIT_ZOOM_CENTER = new LatLong(22.305, 114.1793);
private byte MY_INIT_ZOOM_LEVEL = 13;
private LatLong currentHotSpot = MY_INIT_ZOOM_CENTER;
private TappableMarker positionMarker;
private String inputGeo;
private boolean enableLongPressInfo = false;
private boolean enableSketch = false;
private PaintView paintView;
public View rootView;
protected TileDownloadLayer downloadLayer;
protected void createMapViews() {
mapView = getMapView();
findViewById(R.id.rotateView).setLayerType(View.LAYER_TYPE_SOFTWARE, null);
mapView.getModel().frameBufferModel.setOverdrawFactor(1.0d);
mapView.setClickable(true);
mapView.getMapScaleBar().setVisible(false);
mapView.getModel().displayModel.setFixedTileSize(256);
mapView.setBuiltInZoomControls(false);
mapView.setZoomLevelMin((byte) 10);
mapView.setZoomLevelMax((byte) 18);
// create a tile cache of suitable size
tileCache = AndroidUtil.createTileCache(this, "mapcache", mapView.getModel().displayModel.getTileSize(), 1f, mapView.getModel().frameBufferModel.getOverdrawFactor());
OnlineTileSource onlineTileSource = new OnlineTileSource(new String[]{
"a.tile.thunderforest.com", "b.tile.thunderforest.com", "c.tile.thunderforest.com"},
80);
onlineTileSource.setName("openCycle").setAlpha(false)
.setBaseUrl("/cycle/")
.setParallelRequestsLimit(8).setProtocol("http").setTileSize(256)
.setZoomLevelMax((byte) 25).setZoomLevelMin((byte) 0);
onlineTileSource.setUserAgent("Mapsforge Samples");
downloadLayer = new TileDownloadLayer(tileCache,
mapView.getModel().mapViewPosition, onlineTileSource,
AndroidGraphicFactory.INSTANCE);
mapView.getLayerManager().getLayers().add(downloadLayer);
mapView.setCenter(MY_INIT_ZOOM_CENTER);
mapView.setZoomLevel(MY_INIT_ZOOM_LEVEL);
}
但是,如果我将 tileRenderLayer 与示例离线地图一起使用,它可以正常显示地图。
private static final String MAP_FILE = "hongkong_cycle.map"; // name of the map file in the external storage
private static MapDataStore mapDataStore = new MapFile(Environment.getExternalStoragePublicDirectory("lab.geospatial.maps").toString() + "/" + MAP_FILE);
private MapView mapView;
private TileRendererLayer tileRendererLayer;
private TileCache tileCache;
private Layer sketchLayer;
private MyLocationOverlay myLocationOverlay;
private LatLong MY_INIT_ZOOM_CENTER = new LatLong(22.305, 114.1793);
private byte MY_INIT_ZOOM_LEVEL = 13;
private LatLong currentHotSpot = MY_INIT_ZOOM_CENTER;
private TappableMarker positionMarker;
private String inputGeo;
private boolean enableLongPressInfo = false;
private boolean enableSketch = false;
private PaintView paintView;
public View rootView;
protected TileDownloadLayer downloadLayer;
protected void createMapViews() {
mapView = getMapView();
findViewById(R.id.rotateView).setLayerType(View.LAYER_TYPE_SOFTWARE, null);
mapView.getModel().frameBufferModel.setOverdrawFactor(1.0d);
mapView.setClickable(true);
mapView.getModel().displayModel.setFixedTileSize(256);
mapView.setBuiltInZoomControls(false);
mapView.setZoomLevelMin((byte) 10);
mapView.setZoomLevelMax((byte) 18);
// create a tile cache of suitable size
tileCache = AndroidUtil.createTileCache(this, "mapcache", mapView.getModel().displayModel.getTileSize(), 1f, mapView.getModel().frameBufferModel.getOverdrawFactor());
// tile renderer layer using internal render theme
tileRendererLayer = new TileRendererLayer(
tileCache,
mapDataStore,
mapView.getModel().mapViewPosition,
AndroidGraphicFactory.INSTANCE) {
@Override
public boolean onLongPress(LatLong tapLatLong, Point thisXY, Point tapXY) {
CycleProject.this.onLongPress(tapLatLong, tapXY);
return true;
}
};
tileRendererLayer.setXmlRenderTheme(InternalRenderTheme.DEFAULT);
// only once a layer is associated with a mapView the rendering starts
mapView.getLayerManager().getLayers().add(tileRendererLayer);
mapView.setCenter(MY_INIT_ZOOM_CENTER);
mapView.setZoomLevel(MY_INIT_ZOOM_LEVEL);
}
因为我想使用 opencycle 地图作为不提供离线版本的底图。因此,需要在线瓷砖。想知道它是否适用于 tileRender 但不适用于 TileDownload 类是否有任何关键区别?我已经检查并确认 TileDownloadLayer 部分在 Mapsforge 示例“DownloadCustomLayerViewer”上工作正常
非常感谢您的建议。