Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Arcgis : how to get device location

Hie i tried to implement this codes in my application but it doesnt work , i dont know where i went wrong.

basically, when i launch the sample of the device location. it doesnt show me where is my current location and i dont see any blue dots that resembles the current location i am at.

the only thing that i see is the map . just a plain zoom out map.

I would be really thankful if someone who could help me out on how to get the current location with the blue dots that is displayed on the map..

this is my MainActivity.class

public class HelloWorld extends Activity {
MapView mMapView = null;
ArcGISTiledMapServiceLayer tileLayer;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    // Retrieve the map and initial extent from XML layout


        mMapView = (MapView) findViewById(R.id.map);

         mMapView.addLayer(new ArcGISTiledMapServiceLayer(
             "http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"));

         mMapView.setOnStatusChangedListener(new OnStatusChangedListener() {

           public void onStatusChanged(Object source, STATUS status) {
             if (source == mMapView && status == STATUS.INITIALIZED) {
               LocationService ls = mMapView.getLocationService();
               ls.setAutoPan(false);

               ls.start();
             }

           }

         });



    }


protected void onPause() {
    super.onPause();
    mMapView.pause();
   }

@Override
protected void onResume() {
    super.onResume(); 
    mMapView.unpause();
}   

}
like image 825
FaridAvesko Avatar asked Nov 19 '13 03:11

FaridAvesko


People also ask

What is ESRI location technology?

Esri is the global market leader in geographic information system (GIS) software, location intelligence, and mapping. Since 1969, we have supported customers with geographic science and geospatial analytics, what we call The Science of Where.


2 Answers

this is a code that draws my location every 1 second via provider and GPS . let's first declare variables :

private GraphicsLayer myGraphicalLayer;
MapView mMapView;
    ArcGISLocalTiledLayer baseLayer;
private LocationManager mlocManager;
    private LocationListener mlocListener;

in onCreate function WE CALL LocationListener:

mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        mlocListener = new MyLocationListener();
        mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, mlocListener);
        mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, mlocListener);
// loading the map
        mMapView = (MapView) findViewById(R.id.localMap);
        baseLayer = new ArcGISLocalTiledLayer(basemapurl);
        mMapView.addLayer(baseLayer);
// defining my position layer
        myGraphicalLayer = new GraphicsLayer();

then a function to draw my location :

private void SetMyLocationPoint(final double x, final double y) {
        PictureMarkerSymbol myPin = new PictureMarkerSymbol(getResources().getDrawable(
                R.drawable.mylocation_icon));

        Point wgspoint = new Point(x, y);
        Point mapPoint = (Point) GeometryEngine.project(wgspoint, SpatialReference.create(4326),
                mMapView.getSpatialReference());

        Graphic myPinGraphic = new Graphic(mapPoint, myPin);

        try {
            myGraphicalLayer.removeAll();
        } catch (Exception e) {
            e.printStackTrace();
        }

        myGraphicalLayer.addGraphic(myPinGraphic);
        myGraphicalLayer.setVisible(true);
        mMapView.addLayer(myGraphicalLayer);

    }

make internal class that implements MyLocationListener to get you instant location, and let it call the function named SetMyLocationPoint like this way :

public class MyLocationListener implements LocationListener {

        @Override
        public void onLocationChanged(Location loc) {
            SetMyLocationPoint(loc.getLongitude(), loc.getLatitude());
        }

        @Override
        public void onProviderDisabled(String provider) {
            Toast.makeText(getApplicationContext(), "provider enabled", Toast.LENGTH_SHORT)
                    .show();
        }

        @Override
        public void onProviderEnabled(String provider) {
            Toast.makeText(getApplicationContext(), "provider disabled", Toast.LENGTH_SHORT)
                    .show();
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }
    }
like image 183
wissamOueisMobileApps Avatar answered Sep 28 '22 01:09

wissamOueisMobileApps


You need to use your own location manager or the location client to get the device's current location and then you will have to add that point on the map.

Your map should be in a MapFragment. Get the googleMap object from the fragment and then add your custom blue dot on it.

LocationManager locationManager = (LocationManager) getApplicationContext()
            .getSystemService(Context.LOCATION_SERVICE);

    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
            5000, 5, listener);

}

private LocationListener listener = new LocationListener() {

    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub

        Log.e("Google", "Location Changed");

        if (location == null)
            return;
        Log.e("latitude", location.getLatitude() + "");
        Log.e("longitude", location.getLongitude() + "");

        }

    }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }
};

The above code gets you the location in onLocationChanged method.

Note: i have used GPS_PROVIDER to get the location. There are other ways to get the current location too.

like image 39
Atish Agrawal Avatar answered Sep 27 '22 23:09

Atish Agrawal