2015-07-27 16 views
6

Voglio creare una mappa con marcatore statico per mostrare sempre la posizione del centro dello schermo. Ho creato un marcatore nel layout con l'immagine disegnabile al centro. Ora ho bisogno di ottenere le coordinate del centro e convertirle in indirizzo. successivamente mostra la posizione selezionata in una visualizzazione testuale come posizione selezionata. bisogno di assistenzaCome ottenere la posizione centrale dello schermo su google map?

risposta

6
protected void userLocationMap() { 

     mapFragment = ((SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map)); 
     googleMap = mapFragment.getMap(); 
     int status = GooglePlayServicesUtil 
       .isGooglePlayServicesAvailable(getBaseContext()); 

     if (status != ConnectionResult.SUCCESS) { 
///if play services are not available 
      int requestCode = 10; 
      Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, 
        requestCode); 
      dialog.show(); 

     } else { 

      // Enabling MyLocation Layer of Google Map 
      googleMap.setMyLocationEnabled(true); 

      // Creating a LatLng object for the current location 
      LatLng latLng = new LatLng(latitude, longitude); 
      // Showing the current location in Google Map 
      googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 
      // Zoom in the Google Map 
      googleMap.animateCamera(CameraUpdateFactory.zoomTo(15)); 
      Log.i("latitude", "==========" + latitude); 
////locationTextView holds the address string 
      locationTextView.setText(getCompleteAdressString(latitude, longitude)); 

      // create marker 
      MarkerOptions marker = new MarkerOptions().position(
        new LatLng(latitude, longitude)).title("My Location"); 
      // adding marker 
      googleMap.addMarker(marker); 
     } 
    } 

e il metodo getcompleteAdress è ::::: ==>

private String getCompleteAddressString(double LATITUDE, double LONGITUDE) { 

     String strAdd = ""; 

     Geocoder geocoder = new Geocoder(this, Locale.getDefault()); 
     try { 
      List<Address> addresses = geocoder.getFromLocation(LATITUDE, 
        LONGITUDE, 1); 

      if (addresses != null) { 

       Address returnedAddress = addresses.get(0); 

       StringBuilder strReturnedAddress = new StringBuilder(""); 

       for (int i = 0; i < returnedAddress.getMaxAddressLineIndex(); i++) { 

        strReturnedAddress 
          .append(returnedAddress.getAddressLine(i)).append(
            ","); 
       } 

       strAdd = strReturnedAddress.toString(); 

       Log.w("My Current loction address", 
         "" + strReturnedAddress.toString()); 
      } else { 
       Log.w("My Current loction address", "No Address returned!"); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
      Log.w("My Current loction address", "Canont get Address!"); 
     } 
     return strAdd; 
    } 

Per cambiare posizione come per i clic sui ====>

googleMap.setOnMapClickListener(new OnMapClickListener() { 

      @Override 
      public void onMapClick(LatLng point) { 
       Log.d("Map","Map clicked"); 
       marker.remove(); 
       double latitude = latLng.latitude; 
       double longitude = latLng.longitude; 
locationTextView.setText(getCompleteAdressString(latitude,longitude)); 
       drawMarker(point); 
      } 
     }); 
+0

Grazie per l'aiuto – MANCHAI

+0

se sei soddisfatto di una qualsiasi di queste risposte, contrassegnala come accettata. –

+0

Se non sei soddisfatto delle nostre risposte, faccelo sapere –

22

si può ottenere punto centrale della mappa in qualsiasi momento chiamando questa funzione sul vostro GoogleMap istanza variabile

mMap.getCameraPosition().target 

Ora, se si desidera ottenere centro mappa punto ogni volta che viene modificato, allora è necessario implementare OnCameraChangeListener ascoltatore e chiama la linea sopra per ottenere un nuovo punto centrale.

+0

puoi per favore fornire qualche esempio o così? – MANCHAI

+1

Funziona molto bene e il codice è anche più pulito della risposta accettata –

+0

@MANCHAI Ad esempio: double CameraLat = mMap.getCameraPosition(). Target.latitude; double CameraLong = mMap.getCameraPosition(). Target.longitude; – mehmet

0

Sono riuscito per creare la mappa per la mia posizione attuale. Ma fornisce le coordinate della mia posizione solo una volta e ho bisogno di ottenere la posizione mentre mi muovo in un'altra posizione. postare il mio codice

import java.io.IOException; 
import java.util.List; 
import java.util.Locale; 

import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.GooglePlayServicesUtil; 
import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.GoogleMap.OnCameraChangeListener; 
import com.google.android.gms.maps.GoogleMap.OnMapClickListener; 
import com.google.android.gms.maps.GoogleMap.OnMapLongClickListener; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.CameraPosition; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.Marker; 
import com.google.android.gms.maps.model.MarkerOptions; 
import com.google.android.maps.GeoPoint; 

import android.app.ActionBar; 
import android.app.Activity; 
import android.app.Dialog; 
import android.graphics.Canvas; 
import android.location.Address; 
import android.location.Criteria; 
import android.location.Geocoder; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.View.OnTouchListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 


public class MapLocation extends FragmentActivity implements LocationListener { 

    GoogleMap googleMap; 
    MarkerOptions markerOptions; 
    LatLng latLng; 

    ImageView icon; 
    TextView selected; 

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

     icon = (ImageView)findViewById(R.id.icon_baby); 
     icon.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       finish(); 

      } 
     }); 


    // Getting Google Play availability status 
     int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext()); 

     // Showing status 
     if(status!=ConnectionResult.SUCCESS){ // Google Play Services are not available 

      int requestCode = 10; 
      Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode); 
      dialog.show(); 

     }else { // Google Play Services are available 

      // Getting reference to the SupportMapFragment of activity_main.xml 
      SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 

      // Getting GoogleMap object from the fragment 
      googleMap = fm.getMap(); 

      // Enabling MyLocation Layer of Google Map 
      googleMap.setMyLocationEnabled(true); 

      // Getting LocationManager object from System Service LOCATION_SERVICE 
      LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 

      // Creating a criteria object to retrieve provider 
      Criteria criteria = new Criteria(); 

      // Getting the name of the best provider 
      String provider = locationManager.getBestProvider(criteria, true); 

      // Getting Current Location 
      Location location = locationManager.getLastKnownLocation(provider); 

      if(location!=null){ 
       onLocationChanged(location); 
      } 
      locationManager.requestLocationUpdates(provider, 20000, 0, this); 
     } 
    } 
    //@Override 
    public void onLocationChanged(Location location) { 

     TextView tvLocation = (TextView) findViewById(R.id.selected_location); 

     // Getting latitude of the current location 
     double latitude = location.getLatitude(); 

     // Getting longitude of the current location 
     double longitude = location.getLongitude(); 

     // Creating a LatLng object for the current location 
     LatLng latLng = new LatLng(latitude, longitude); 

     // Showing the current location in Google Map 
     googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 

     // Zoom in the Google Map 
     googleMap.animateCamera(CameraUpdateFactory.zoomTo(15)); 

     // Setting latitude and longitude in the TextView tv_location 
     tvLocation.setText("Latitude:" + latitude + ", Longitude:"+ longitude); 
    } 
    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // TODO Auto-generated method stub 

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

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

    } 
    } 
Problemi correlati