/*
* Copyright 2018-2020 devemux86
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see
* You'll need a map with filename berlin.map from download.mapsforge.org in device storage. */ public class GettingStarted extends Activity { // Request code for selecting a map file private static final int SELECT_MAP_FILE = 0; private MapView mapView; private IRenderTheme theme; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Map view mapView = new MapView(this); setContentView(mapView); // Open map Intent intent = new Intent(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ? Intent.ACTION_OPEN_DOCUMENT : Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("*/*"); startActivityForResult(intent, SELECT_MAP_FILE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == SELECT_MAP_FILE && resultCode == Activity.RESULT_OK) { if (data != null) { Uri uri = data.getData(); openMap(uri); } } } private void openMap(Uri uri) { try { // Tile source MapFileTileSource tileSource = new MapFileTileSource(); FileInputStream fis = (FileInputStream) getContentResolver().openInputStream(uri); tileSource.setMapFileInputStream(fis); // Vector layer VectorTileLayer tileLayer = mapView.map().setBaseMap(tileSource); // Building layer mapView.map().layers().add(new BuildingLayer(mapView.map(), tileLayer)); // Label layer mapView.map().layers().add(new LabelLayer(mapView.map(), tileLayer)); // Render theme theme = mapView.map().setTheme(VtmThemes.DEFAULT); // Scale bar MapScaleBar mapScaleBar = new DefaultMapScaleBar(mapView.map()); MapScaleBarLayer mapScaleBarLayer = new MapScaleBarLayer(mapView.map(), mapScaleBar); mapScaleBarLayer.getRenderer().setPosition(GLViewport.Position.BOTTOM_LEFT); mapScaleBarLayer.getRenderer().setOffset(5 * CanvasAdapter.getScale(), 0); mapView.map().layers().add(mapScaleBarLayer); // Note: this map position is specific to Berlin area mapView.map().setMapPosition(52.517037, 13.38886, 1 << 12); } catch (Exception e) { /* * In case of map file errors avoid crash, but developers should handle these cases! */ e.printStackTrace(); } } @Override protected void onResume() { super.onResume(); mapView.onResume(); } @Override protected void onPause() { mapView.onPause(); super.onPause(); } @Override protected void onDestroy() { mapView.onDestroy(); theme.dispose(); super.onDestroy(); } }