Mark current location on google map

断了今生、忘了曾经 提交于 2019-12-06 11:55:06

First, to obtain the current location:

private Location mCurrentLocation;
mCurrentLocation = mLocationClient.getLastLocation();

Read here to know more.

And then you can point to the location using:

LatLng myLaLn = new LatLng(mCurrentLocation.getLatitude(), mCurrentLocation.getLongitude());

CameraPosition camPos = new CameraPosition.Builder().target(myLaLn)
                .zoom(15)
                .bearing(45)
                .tilt(70)
                .build();

 CameraUpdate camUpd3 = CameraUpdateFactory.newCameraPosition(camPos);

 map.animateCamera(camUpd3);

I give you a simple but complete example to show a map and the current location:

(Full project available in github.com/josuadas/LocationDemo )

public class MainActivity extends FragmentActivity implements
        GooglePlayServicesClient.ConnectionCallbacks,
        GooglePlayServicesClient.OnConnectionFailedListener {

    private final static int CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000;

    private LocationClient mLocationClient;
    private Location mCurrentLocation;
    private GoogleMap map;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.map);
    }

    @Override
    protected void onResume() {
        super.onResume();
        setUpMapIfNeeded();
        setUpLocationClientIfNeeded();
        mLocationClient.connect();
    }

    private void setUpMapIfNeeded() {
        // Do a null check to confirm that we have not already instantiated the
        // map.
        if (map == null) {
            // Try to obtain the map from the SupportMapFragment.
            map = ((SupportMapFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.map)).getMap();
            // Check if we were successful in obtaining the map.
            if (map == null) {
                Toast.makeText(this, "Google maps not available",
                        Toast.LENGTH_LONG).show();
            }
        }
    }

    private void setUpLocationClientIfNeeded() {
        if (mLocationClient == null) {
            Toast.makeText(getApplicationContext(), "Waiting for location",
                    Toast.LENGTH_SHORT).show();
            mLocationClient = new LocationClient(getApplicationContext(), this, // ConnectionCallbacks
                    this); // OnConnectionFailedListener
        }
    }

    @Override
    public void onPause() {
        super.onPause();
        if (mLocationClient != null) {
            mLocationClient.disconnect();
        }
    }

    /*
     * Called by Location Services when the request to connect the client
     * finishes successfully. At this point, you can request the current
     * location or start periodic updates
     */
    @Override
    public void onConnected(Bundle dataBundle) {
        mCurrentLocation = mLocationClient.getLastLocation();
        if (mCurrentLocation != null) {
            Toast.makeText(getApplicationContext(), "Found!",
                    Toast.LENGTH_SHORT).show();
            centerInLoc();
        }
    }

    private void centerInLoc() {
        LatLng myLaLn = new LatLng(mCurrentLocation.getLatitude(),
                mCurrentLocation.getLongitude());
        CameraPosition camPos = new CameraPosition.Builder().target(myLaLn)
                .zoom(15).bearing(45).tilt(70).build();

        CameraUpdate camUpd3 = CameraUpdateFactory.newCameraPosition(camPos);
        map.animateCamera(camUpd3);

        MarkerOptions markerOpts = new MarkerOptions().position(myLaLn).title(
                "my Location");
        map.addMarker(markerOpts);
    }

    /*
     * Called by Location Services if the connection to the location client
     * drops because of an error.
     */
    @Override
    public void onDisconnected() {
        // Display the connection status
        Toast.makeText(this, "Disconnected. Please re-connect.",
                Toast.LENGTH_SHORT).show();
    }

    /*
     * Called by Location Services if the attempt to Location Services fails.
     */
    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
        /*
         * Google Play services can resolve some errors it detects. If the error
         * has a resolution, try sending an Intent to start a Google Play
         * services activity that can resolve error.
         */
        if (connectionResult.hasResolution()) {
            try {
                // Start an Activity that tries to resolve the error
                connectionResult.startResolutionForResult(this,
                        CONNECTION_FAILURE_RESOLUTION_REQUEST);
                /*
                 * Thrown if Google Play services canceled the original
                 * PendingIntent
                 */
            } catch (IntentSender.SendIntentException e) {
                // Log the error
                e.printStackTrace();
            }
        } else {
            /*
             * If no resolution is available
             */
            Log.e("Home", Integer.toString(connectionResult.getErrorCode()));
        }
    }
}

Note1: I omitted the "Check for Google Play Services" part by simplicity but it should be added as a good practice.

Note2: You need the google-play-services_lib project and reference it from yours.

You can find all information about interacting with google maps in android here

See followed snippets of code:

...
MyLocationOverlay myLoc = null;
MapView myMapView = null;
GeoPoint mCurrentPoint;

...

myMapView = (MapView) findViewById(R.id.mapView);

    myMapView.setBuiltInZoomControls(true);
    myMapView.setStreetView(true);

    mc = myMapView.getController();
    mc.setZoom(17);
    myLoc = new CustomMyLocationOverlay(this, myMapView);
    myLoc.runOnFirstFix(new Runnable() {
        public void run() {
            if (mCurrentPoint.equals(new GeoPoint(0,0))){
                mc.animateTo(myLoc.getMyLocation());
                mCurrentPoint = myLoc.getMyLocation();
            } 
        }
    });

    myMapView.getOverlays().add(myLoc);
    myMapView.postInvalidate();

    zoomToMyLocation();

    Drawable drawable = this.getResources().getDrawable(R.drawable.target);
    mItemizedoverlay = new MyItemizedOverlay(drawable, this);

   // here get your lat, longt as double and put in GeoPoint

   mCurrentPoint = new GeoPoint((int)lat,(int)lon);

    if (!mCurrentPoint.equals(new GeoPoint(0,0))){
        mc.animateTo(mCurrentPoint);
        setMarker();
    } 

...

public void zoomToMyLocation() {
    mCurrentPoint = myLoc.getMyLocation();
    if (mCurrentPoint != null) {
        myMapView.getController().animateTo(mCurrentPoint);
        // myMapView.getController().setZoom(10);
    }
}

map.xml

<com.google.android.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:enabled="true"
android:apiKey="xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"     
/>

Hope it will help you

mMap.setMyLocationEnabled(true);

This line will show an icon at top right corner of the map, after clicking on which it takes to your current location on map.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!