package com.nutiteq.advancedmap3; import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.widget.Toast; import com.nutiteq.core.MapPos; import com.nutiteq.datasources.LocalVectorDataSource; import com.nutiteq.graphics.Color; import com.nutiteq.hellomap3.util.CircleUtil; import com.nutiteq.layers.VectorLayer; import com.nutiteq.projections.Projection; import com.nutiteq.styles.PolygonStyle; import com.nutiteq.styles.PolygonStyleBuilder; import com.nutiteq.utils.Log; import com.nutiteq.vectorelements.Polygon; import com.nutiteq.wrappedcommons.MapPosVector; /** * Shows user GPS location on map. * Make sure your app has location permission in Manifest file */ public class MyLocationActivity extends VectorMapSampleBaseActivity { private LocationManager locationManager; private LocationListener locationListener; @Override protected void onCreate(Bundle savedInstanceState) { // MapSampleBaseActivity creates and configures mapView super.onCreate(savedInstanceState); final Projection proj = super.baseProjection; // Initialize an local vector data source where to put my location circle LocalVectorDataSource vectorDataSource = new LocalVectorDataSource(proj); // Initialize a vector layer with the previous data source VectorLayer vectorLayer = new VectorLayer(vectorDataSource); // Add the previous vector layer to the map mapView.getLayers().add(vectorLayer); // style for GPS My Location circle PolygonStyleBuilder polygonStyleBuilder = new PolygonStyleBuilder(); polygonStyleBuilder.setColor(new Color(0xAAFF0000)); PolygonStyle gpsStyle = polygonStyleBuilder.buildStyle(); MapPosVector gpsCirclePoses = new MapPosVector(); final Polygon locationCircle = new Polygon(gpsCirclePoses, gpsStyle); // initially empty and invisible locationCircle.setVisible(false); vectorDataSource.add(locationCircle); locationListener = new LocationListener() { @Override public void onLocationChanged(Location location) { Log.debug("GPS onLocationChanged " + location); if (locationCircle != null) { locationCircle.setPoses(CircleUtil.createLocationCircle(location, proj)); locationCircle.setVisible(true); mapView.setFocusPos(proj.fromWgs84(new MapPos(location.getLongitude(), location.getLatitude())), 0.5f); mapView.setZoom(14, 1.0f); // zoom 2, duration 0 seconds (no animation) } } @Override public void onStatusChanged(String s, int i, Bundle bundle) {} @Override public void onProviderEnabled(String s) {} @Override public void onProviderDisabled(String s) {} }; locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); // user has maybe disabled location services / GPS if (locationManager.getProviders(true).size() == 0) { Toast.makeText(this, "Cannot get location, no location providers enabled. Check device settings", Toast.LENGTH_LONG).show(); } // use all enabled device providers with same parameters for (String provider : locationManager.getProviders(true)) { Log.debug("adding location provider " + provider); locationManager.requestLocationUpdates(provider, 1000, 50, locationListener); } } @Override public void onDestroy() { locationManager.removeUpdates(locationListener); super.onDestroy(); } }