2013-08-25 7 views
62

J'essaie de me tromper avec l'API Maps V2 pour mieux me familiariser avec elle, et j'essaie de démarrer la carte centrée à l'emplacement actuel de l'utilisateur. En utilisant la déclaration map.setMyLocationEnabled(true);, je suis en mesure de montrer mon emplacement actuel sur la carte. Cela ajoute également le bouton à l'interface utilisateur qui centre la carte sur mon emplacement actuel.Android Google Maps API V2 Zoom sur l'emplacement actuel

Je veux simuler ce bouton presse dans mon code. Je suis familier avec les classes LocationManager et LocationListener et je réalise que l'utilisation de ces méthodes est une alternative viable, mais la fonctionnalité de centrage et de zoom sur l'emplacement de l'utilisateur semble déjà être intégrée au bouton.

Si l'API dispose d'une méthode pour afficher l'emplacement actuel de l'utilisateur, il doit sûrement être plus facile de centrer sur l'emplacement que d'utiliser les classes LocationManager/LocationListener, n'est-ce pas?

+0

Le point principal ici est d'obtenir les géocoordonnées de l'emplacement actuel. Vous pouvez utiliser la bibliothèque GPS pour l'obtenir. Une fois que vous avez les géocoordonnées, c'est trivial. Référez-vous à ce qui suit pour plus de détails: https://stackoverflow.com/questions/17519198/how-to-get-the-current-location-latitude-and-longitude-in-android/17519248#17519248 – user846316

Répondre

12
youmap.animateCamera(CameraUpdateFactory.newLatLngZoom(currentlocation, 16)); 

16 est le niveau de zoom

+1

Mais comment puis-je obtenir currentLocation sans utiliser le LocationManager et LocationListener? Ou n'est-ce pas possible? – user139260

+0

ce n'est pas possible selon mes connaissances. et je vous suggère de ne pas utiliser le gestionnaire de l'emplacement. Client de localisation d'utilisateur qui est de haute précision et faible consommation d'énergie de la batterie et facile à implémenter.http: //developer.android.com/google/play-services/location.html nouvellement lancé par google –

+1

Lieu de localisation = map.getMyLocation () map is GoogleMap object – Venkat

39

Une fois que vous instansiated l'objet de la carte (à partir du fragment) ajouter ce -

private void centerMapOnMyLocation() { 

    map.setMyLocationEnabled(true); 

    location = map.getMyLocation(); 

    if (location != null) { 
     myLocation = new LatLng(location.getLatitude(), 
       location.getLongitude()); 
    } 
    map.animateCamera(CameraUpdateFactory.newLatLngZoom(myLocation, 
      Constants.MAP_ZOOM)); 
} 

si vous avez besoin de conseils il suffit de demander, mais il devrait être auto explicatives du - Installez simplement l'objet myLocation pour un objet par défaut ...

+1

J'ai le même problème, mais quand j'essaie d'utiliser map.getMyLocation() il m'avertit que cette méthode est obsolète. Quelle serait la bonne façon de le faire maintenant? – Pam

+13

"getMyLocation() Cette méthode est obsolète, utilisez plutôt LocationClient.LocationClient fournit une recherche d'emplacement et une consommation d'énergie améliorées et est utilisé par le point bleu "My Location". Voir le MyLocationDemoActivity dans l'exemple de dossier des applications exemple de code, ou le Guide du développeur Lieu. "(Tiré du site de développeur android) La prochaine fois qu'il suffit de lire l'API si quelque chose est obsolète il y a un remplacement – crazyPixel

+5

LocationClient a été marqué obsolète.Vous devez utiliser LocationServices à la place –

93

Essayez ce codage:

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
Criteria criteria = new Criteria(); 

Location location = locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria, false)); 
if (location != null) 
{ 
    map.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location.getLatitude(), location.getLongitude()), 13)); 

    CameraPosition cameraPosition = new CameraPosition.Builder() 
     .target(new LatLng(location.getLatitude(), location.getLongitude()))  // Sets the center of the map to location user 
     .zoom(17)     // Sets the zoom 
     .bearing(90)    // Sets the orientation of the camera to east 
     .tilt(40)     // Sets the tilt of the camera to 30 degrees 
     .build();     // Creates a CameraPosition from the builder 
    map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));  
} 
+1

et si l'emplacement == null..S'il vous plaît aider – jyomin

+0

@jyomin Cochez ici pour ma réponse sur la façon d'obtenir l'emplacement de l'utilisateur. Il utilise la méthode ci-dessus avec un peu de sécurité pour vérifier le meilleur emplacement possible de l'utilisateur. http://stackoverflow.com/a/14511032/845038 Cela pourrait remédier à l'obtention d'un null en vérifiant le meilleur emplacement suivant. – DMCApps

+0

Cette solution est simple et fonctionne simplement. Je vous remercie. – Enkk

1

Cela fonctionne avec zoom Emplacement pour Google Map V2

double lat= location.getLatitude(); 
double lng = location.getLongitude(); 
LatLng ll = new LatLng(lat, lng); 
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(ll, 20)); 
+3

'location' lance l'erreur:' Impossible de résoudre le symbole 'location'' – beckah

+0

La question est comment obtenir les coordonnées de l'emplacement actuel et le réponse est ici: http://stackoverflow.com/a/17519248/846316 – user846316

3
private void setUpMapIfNeeded(){ 
    if (mMap == null){ 
mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();//invoke of map fragment by id from main xml file 

    if (mMap != null) { 
     mMap.setMyLocationEnabled(true);//Makes the users current location visible by displaying a blue dot. 

     LocationManager lm=(LocationManager)getSystemService(LOCATION_SERVICE);//use of location services by firstly defining location manager. 
     String provider=lm.getBestProvider(new Criteria(), true); 

     if(provider==null){ 
      onProviderDisabled(provider); 
       } 
     Location loc=lm.getLastKnownLocation(provider); 


     if (loc!=null){ 
      onLocationChanged(loc); 
     } 
     } 
    } 
} 

    // Initialize map options. For example: 
    // mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 

@Override 
public void onLocationChanged(Location location) { 

    LatLng latlng=new LatLng(location.getLatitude(),location.getLongitude());// This methods gets the users current longitude and latitude. 

    mMap.moveCamera(CameraUpdateFactory.newLatLng(latlng));//Moves the camera to users current longitude and latitude 
    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latlng,(float) 14.6));//Animates camera and zooms to preferred state on the user's current location. 
} 

    // TODO Auto-generated method stub 

+0

S'il vous plaît ajouter quelques explications de ce que fait votre code et comment il répond à la question, et s'il vous plaît le formater correctement. Convertissez les onglets en espaces avant de copier le code vers SO, car les onglets ne sont souvent pas rendus comme prévu. –

+0

La solution ci-dessus charge un fragment de carte, et montre une position centrée de l'emplacement actuel de l'utilisateur en utilisant le niveau de zoom souhaité dans ce cas (14.6) @AdiInbar – imm3000

+0

Veuillez inclure les explications dans la réponse plutôt que de répondre dans les commentaires, et formater le code. (FYI, je n'ai pas demandé par intérêt personnel J'ai rencontré votre réponse dans la file d'attente des critiques Low Quality et vous conseillait de l'améliorer pour éviter d'autres downvotes et supprimer des votes.) –

15
mMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() { 
     @Override 
     public void onMyLocationChange(Location location) { 

       CameraUpdate center=CameraUpdateFactory.newLatLng(new LatLng(location.getLatitude(), location.getLongitude())); 
       CameraUpdate zoom=CameraUpdateFactory.zoomTo(11); 
       mMap.moveCamera(center); 
       mMap.animateCamera(zoom); 

     } 
    }); 
+1

Malheureusement, cette méthode est maintenant obsolète :( – Antonio

5

essayer ce code:

private GoogleMap mMap; 


LocationManager locationManager; 


private static final String TAG = ""; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_maps); 
    // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(map); 
    mapFragment.getMapAsync(this); 

    arrayPoints = new ArrayList<LatLng>(); 
} 

@Override 
public void onMapReady(GoogleMap googleMap) { 


    mMap = googleMap; 


    mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 


    LatLng myPosition; 


    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     // TODO: Consider calling 
     // ActivityCompat#requestPermissions 
     // here to request the missing permissions, and then overriding 
     // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
     //           int[] grantResults) 
     // to handle the case where the user grants the permission. See the documentation 
     // for ActivityCompat#requestPermissions for more details. 
     return; 
    } 
    googleMap.setMyLocationEnabled(true); 
    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
    Criteria criteria = new Criteria(); 
    String provider = locationManager.getBestProvider(criteria, true); 
    Location location = locationManager.getLastKnownLocation(provider); 


    if (location != null) { 
     double latitude = location.getLatitude(); 
     double longitude = location.getLongitude(); 
     LatLng latLng = new LatLng(latitude, longitude); 
     myPosition = new LatLng(latitude, longitude); 


     LatLng coordinate = new LatLng(latitude, longitude); 
     CameraUpdate yourLocation = CameraUpdateFactory.newLatLngZoom(coordinate, 19); 
     mMap.animateCamera(yourLocation); 
    } 
} 

}

N'oubliez pas d'ajouter des autorisations sur AndroidManifest.xml.

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
+0

Bienvenue dans Stack Overflow! Bien que ce code puisse répondre à la question, il est préférable d'inclure une description du problème et de la manière dont votre code va s'attaquer au problème donné.Pour l'avenir, voici quelques informations, comment crack une réponse géniale sur Stack Overflow: http://stackoverflow.com/help/how-to-answer – dirtydanee

Questions connexes