package com.dhec.MPOS; import com.esri.android.map.LocationService; import com.esri.android.map.MapView; import com.esri.android.map.ags.ArcGISDynamicMapServiceLayer; import com.esri.android.map.ags.ArcGISTiledMapServiceLayer; import com.esri.android.map.event.OnStatusChangedListener; import com.esri.core.geometry.Envelope; import com.esri.core.geometry.GeometryEngine; import com.esri.core.geometry.LinearUnit; import com.esri.core.geometry.Point; import com.esri.core.geometry.SpatialReference; import com.esri.core.geometry.Unit; import android.app.Activity; import android.content.Intent; import android.location.Location; import android.location.LocationListener; import android.media.MediaPlayer; import android.os.Bundle; import android.view.View; import android.widget.Button; public class Mapscreen extends Activity { MapView map = null; // The circle area specified by search_radius and input lat/lon serves // searching purpose. It is also used to construct the extent which // map zooms to after the first GPS fix is retrieved. final static double SEARCH_RADIUS = 5; protected static final Intent OnStatusChangedListener = null; /** Called when the activity is first created. */ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mapscreen); // Retrieve the map and initial extent from XML layout map = (MapView)findViewById(R.id.map); // Add dynamic layer to MapView map.addLayer(new ArcGISTiledMapServiceLayer("" + "http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer")); map.addLayer(new ArcGISDynamicMapServiceLayer("" + "http://TEST/ArcGIS/rest/services/Mobile/MPOS/MapServer")); //Button Sound final MediaPlayer buttonSound = MediaPlayer.create(Mapscreen.this, R.raw.watersplash); //Setting up the button references Button ZoomToMyLocation = (Button) findViewById (R.id.button3); //When clicked, Activates the Zoom To GPS process ZoomToMyLocation.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub buttonSound.start(); //I need the ZoomToMyLocation button to excute here I think? map.setOnStatusChangedListener(new OnStatusChangedListener(){ //Starts searching for the GPS location of the phone. Below here I've gotten this code to work before, but not //with my custom button above. private static final long serialVersionUID = 1L; public void onStatusChanged(Object source, STATUS status) { if (source == map && status == STATUS.INITIALIZED) { LocationService ls = map.getLocationService(); ls.setAutoPan(false); ls.setLocationListener(new LocationListener() { boolean locationChanged = false; // Zooms to the current location when first GPS fix // arrives. public void onLocationChanged(Location loc) { if (!locationChanged) { locationChanged = true; double locy = loc.getLatitude(); double locx = loc.getLongitude(); Point wgspoint = new Point(locx, locy); Point mapPoint = (Point) GeometryEngine .project(wgspoint, SpatialReference.create(4326), map.getSpatialReference()); Unit mapUnit = map.getSpatialReference() .getUnit(); double zoomWidth = Unit.convertUnits( SEARCH_RADIUS, Unit.create(LinearUnit.Code.MILE_US), mapUnit); Envelope zoomExtent = new Envelope(mapPoint, zoomWidth, zoomWidth); map.setExtent(zoomExtent); } } public void onProviderDisabled(String arg0) { } public void onProviderEnabled(String arg0) { } public void onStatusChanged(String arg0, int arg1, Bundle arg2) { } }); ls.start(); } } }); }}); } protected void onPause() { super.onPause(); map.pause(); } protected void onResume() { super.onResume(); map.unpause(); } }
package com.dhec.MPOS; import com.esri.android.map.LocationService; import com.esri.android.map.MapView; import com.esri.android.map.ags.ArcGISDynamicMapServiceLayer; import com.esri.android.map.ags.ArcGISTiledMapServiceLayer; import com.esri.core.geometry.Envelope; import com.esri.core.geometry.GeometryEngine; import com.esri.core.geometry.LinearUnit; import com.esri.core.geometry.Point; import com.esri.core.geometry.SpatialReference; import com.esri.core.geometry.Unit; import android.app.Activity; import android.location.Location; import android.location.LocationListener; import android.os.Bundle; import android.view.View; import android.widget.Button; public class Mapscreen extends Activity { // The circle area specified by search_radius and input lat/lon serves // searching purpose. It is also used to construct the extent which // map zooms to after the first GPS fix is retrieved. final static double SEARCH_RADIUS = 5; MapView map = null; Button ZoomToMyLocation; /** Called when the activity is first created. */ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mapscreen); // Retrieve the map and initial extent from XML layout map = (MapView) findViewById (R.id.map); // This adds ESRI's titled map service layer "World Street Map" to the MapView, as well as my // dynamics map service "MPOS" map.addLayer(new ArcGISTiledMapServiceLayer("" + "http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer")); map.addLayer(new ArcGISDynamicMapServiceLayer("" + "http://TEST/ArcGIS/rest/services/Mobile/MPOS/MapServer")); //Setting up the button reference ZoomToMyLocation = (Button) findViewById (R.id.button1); //When "Button ZoomToMyLocation" is clicked, method "public void onClick(View v)" sets up for location listening. ZoomToMyLocation.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { LocationService ls = map.getLocationService(); ls = map.getLocationService(); ls.setAccuracyCircleOn(true); ls.setAutoPan(true); ls.setLocationListener(new LocationListener() { boolean locationChanged = false; // Zooms to the current location when first GPS fix arrives. public void onLocationChanged(Location loc) { if (!locationChanged) { locationChanged = true; double locy = loc.getLatitude(); double locx = loc.getLongitude(); Point wgspoint = new Point(locx, locy); Point mapPoint = (Point) GeometryEngine .project(wgspoint, SpatialReference.create(4326), map.getSpatialReference()); Unit mapUnit = map.getSpatialReference() .getUnit(); double zoomWidth = Unit.convertUnits( SEARCH_RADIUS, Unit.create(LinearUnit.Code.MILE_US), mapUnit); Envelope zoomExtent = new Envelope(mapPoint, zoomWidth, zoomWidth); map.setExtent(zoomExtent); } } public void onProviderDisabled(String arg0) { } public void onProviderEnabled(String arg0) { } public void onStatusChanged(String arg0, int arg1, Bundle arg2) { } }); if (ls.isStarted() == false){ ls.start(); } else { ls.stop(); }; } }); } }
@Override public void onStatusChanged(Object source, STATUS status) { if (OnStatusChangedListener.STATUS.INITIALIZED == status && source == _mapView) { _isMapLoaded = true; setMapType(_maptype); if(_center_lat == null || _center_lon == null){ latlon = new Point(_DEFAULT_LON,_DEFAULT_LAT); } else{ latlon = new Point(_center_lon,_center_lat); } Point point = (Point)GeometryEngine.project(latlon,SpatialReference.create(4326), _mapView.getSpatialReference()); _mapView.centerAt(point,false); if(_center_scale == null){ _mapView.setScale(_DEFAULT_SCALE); } else{ _mapView.setScale(_center_scale); } Log.d("MapViewController", "setOnStatusChangedListener() STATUS: " + status); dispatchStatusEvent(new MapViewControllerEvent(MapViewEvent.STATUS_INITIALIZED), status.toString()); //custom event } if (OnStatusChangedListener.STATUS.LAYER_LOADING_FAILED == status && source == _mapView){ Log.d("MapViewController", "setMapListeners() STATUS: " + status + ", " + status.toString()); displayToast("There was a map problem with loading a layer: " + status.toString()); dispatchStatusErrorEvent(new MapViewControllerEvent(MapViewEvent.STATUS_LAYER_LOADING_FAILED), status.toString()); //custom event } }