package org.osmdroid.google.sample; import android.content.Context; import android.graphics.Color; import android.location.Location; import android.location.LocationManager; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import org.osmdroid.api.IGeoPoint; import org.osmdroid.api.IMap; import org.osmdroid.api.IPosition; import org.osmdroid.api.IProjection; import org.osmdroid.api.Marker; import org.osmdroid.api.OnCameraChangeListener; import org.osmdroid.api.Polyline; import org.osmdroid.google.wrapper.v2.MapFactory; import org.osmdroid.thirdparty.Constants; import org.osmdroid.tileprovider.util.ManifestUtil; import org.osmdroid.util.GeoPoint; import org.osmdroid.util.LocationUtils; import org.osmdroid.util.Position; /** * This is a simple app that demonstrates how to use a common interface ({@link IMap}) * to perform functions on different map types. */ public class Googlev1WrapperSample extends FragmentActivity { private static final int OSM_MAP_VIEW_ID = 1; private static final int GOOGLE_MAP_V1_VIEW_ID = 2; private static final int GOOGLE_MAP_V2_VIEW_ID = 3; private static final int ENABLE_MY_LOCATION_ID = 4; private static final int DISABLE_MY_LOCATION_ID = 5; private static final int ROTATE_ID = 6; private MenuItem mOsmMenuItem; private MenuItem mOsmWithBingMenuItem; private MenuItem mGoogleV1MenuItem; private MenuItem mGoogleV2MenuItem; private MenuItem mEnableMyLocationOverlayMenuItem; private MenuItem mDisableMyLocationOverlayMenuItem; private MenuItem mRotateMenuItem; private IMap mMap; @Override protected void onCreate(final Bundle aBundle) { super.onCreate(aBundle); } @Override protected void onResume() { super.onResume(); setMapView(); } @Override protected void onPause() { mMap.setMyLocationEnabled(false); super.onPause(); } @Override protected void onDestroy() { super.onDestroy(); } @Override protected void onSaveInstanceState(final Bundle outState) { super.onSaveInstanceState(outState); } @Override public void onLowMemory() { super.onLowMemory(); } @Override public boolean onCreateOptionsMenu(final Menu pMenu) { mEnableMyLocationOverlayMenuItem = pMenu.add(0, ENABLE_MY_LOCATION_ID, Menu.NONE, R.string.enable_my_location); mDisableMyLocationOverlayMenuItem = pMenu.add(0, DISABLE_MY_LOCATION_ID, Menu.NONE, R.string.disable_my_location); mRotateMenuItem = pMenu.add(0, ROTATE_ID, Menu.NONE, R.string.rotate); return true; } @Override public boolean onPrepareOptionsMenu(final Menu pMenu) { mEnableMyLocationOverlayMenuItem.setVisible(!mMap.isMyLocationEnabled()); mDisableMyLocationOverlayMenuItem.setVisible(mMap.isMyLocationEnabled()); return super.onPrepareOptionsMenu(pMenu); } @Override public boolean onOptionsItemSelected(final MenuItem pItem) { if (pItem == mEnableMyLocationOverlayMenuItem) { mMap.setMyLocationEnabled(true); setLastKnownLocation(); } if (pItem == mDisableMyLocationOverlayMenuItem) { mMap.setMyLocationEnabled(false); } if (pItem == mRotateMenuItem) { mMap.setBearing(mMap.getBearing() + 45); debugProjection(); } return false; } private void setMapView() { if (mMap != null) { mMap.setMyLocationEnabled(false); } final com.google.android.maps.MapView mapView = new com.google.android.maps.MapView(this, ManifestUtil.retrieveKey(this, "com.google.android.geo.API_KEY")); setContentView(mapView); mMap = MapFactory.getMap(mapView); final Position position = new Position(52.370816, 9.735936); // Hannover position.setZoomLevel(14); mMap.setPosition(position); mMap.setMyLocationEnabled(false); addMarkers(); addPolyline(); mMap.setOnCameraChangeListener(new OnCameraChangeListener() { @Override public void onCameraChange(final IPosition position) { Log.d(Constants.LOGTAG, "onCameraChange"); } }); } private void addMarkers() { mMap.addMarker(new Marker(52.370816, 9.735936).title("Hannover").snippet("Description of Hannover")); mMap.addMarker(new Marker(52.518333, 13.408333).title("Berlin").snippet("Description of Berlin").icon(R.drawable.berlin)); mMap.addMarker(new Marker(38.895000, -77.036667).title("Washington").snippet("Description of Washington")); mMap.addMarker(new Marker(37.779300, -122.419200).title("San Francisco").snippet("Description of San Francisco")); mMap.addMarker(new Marker(-38.371000, 178.298000).title("Tolaga Bay").snippet("Description of Tolaga Bay")); // mMap.addMarker(new Marker(52.375000, 9.730000).title("Layers").snippet("Layers")); } private void addPolyline() { final Polyline polyline = new Polyline() .color(Color.BLUE) .width(5.0f) .points(new GeoPoint(52370816, 9735936), new GeoPoint(52370000, 9740000), new GeoPoint(52370000, 9730000)); final int id = mMap.addPolyline(polyline); mMap.addPointsToPolyline(id, new GeoPoint(52380000, 9730000)); } private void setLastKnownLocation() { final LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); final Location location = LocationUtils.getLastKnownLocation(lm); if (location != null) { mMap.setCenter(location.getLatitude(), location.getLongitude()); } } /** * This is just used for debugging */ private void debugProjection() { new Thread() { @Override public void run() { // let the map get redrawn and a new projection calculated try { sleep(1000); } catch (InterruptedException ignore) { } // then get the projection runOnUiThread(new Runnable() { @Override public void run() { final IProjection projection = mMap.getProjection(); final IGeoPoint northEast = projection.getNorthEast(); final IGeoPoint southWest = projection.getSouthWest(); final IProjection breakpoint = projection; } }); } }.start(); } }