Ich versuche, mit der Karten-API V2 herumzuspielen, um mich besser damit vertraut zu machen, und ich versuche, die Karte zentriert am aktuellen Standort des Benutzers zu starten. Mit der map.setMyLocationEnabled(true);
Anweisung kann ich meinen aktuellen Standort auf der Karte anzeigen. Dadurch wird auch die Schaltfläche zur Benutzeroberfläche hinzugefügt, mit der die Karte an meinem aktuellen Standort zentriert wird.
Ich möchte diesen Tastendruck in meinem Code simulieren. Ich bin mit den Klassen und vertraut LocationManager
und LocationListener
erkenne, dass die Verwendung dieser Klassen eine praktikable Alternative ist, aber die Funktionalität zum Zentrieren und Vergrößern des Standorts des Benutzers scheint bereits über die Schaltfläche integriert zu sein.
Wenn die API über eine Methode verfügt, um den aktuellen Standort des Benutzers anzuzeigen, muss es sicherlich eine einfachere Möglichkeit geben, sich auf den Standort zu konzentrieren, als die Klassen LocationManager
/ zu LocationListener
verwenden, oder?
quelle
Antworten:
Versuchen Sie diese Codierung:
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)); }
quelle
The Google Play services location APIs are preferred over the Android framework location APIs (android.location) as a way of adding location awareness to your app.
Diese Methode ist alt. Bitte überprüfen Sie developer.android.com/training/location/index.htmlNachdem Sie das Kartenobjekt (aus dem Fragment) instansiiert haben, fügen Sie Folgendes hinzu:
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)); }
Wenn Sie eine Anleitung benötigen, fragen Sie einfach, diese sollte jedoch selbsterklärend sein. Installieren Sie einfach das myLocation-Objekt für ein Standardobjekt ...
quelle
youmap.animateCamera(CameraUpdateFactory.newLatLngZoom(currentlocation, 16));
16 ist die Zoomstufe
quelle
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); } });
quelle
Versuchen Sie diesen 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); } }
}}
Vergessen Sie nicht, Berechtigungen für AndroidManifest.xml hinzuzufügen.
<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"/>
quelle
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
quelle
Hier erfahren Sie, wie Sie dies in Kotlin
ViewModel
undFusedLocationProviderClient
Code in Kotlin tunlocationClient.lastLocation.addOnSuccessListener { location: Location? -> location?.let { val position = CameraPosition.Builder() .target(LatLng(it.latitude, it.longitude)) .zoom(15.0f) .build() map.animateCamera(CameraUpdateFactory.newCameraPosition(position)) } }
quelle
locationClient.lastLocation.addOnSuccessListener{}
?Dies funktioniert Aktueller Standort mit Zoom für Google Map V2
double lat= location.getLatitude(); double lng = location.getLongitude(); LatLng ll = new LatLng(lat, lng); googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(ll, 20));
quelle
location
wirft den Fehler:Can not resolute symbol 'location'
Schau dir das an:
fun requestMyGpsLocation(context: Context, callback: (location: Location) -> Unit) { val request = LocationRequest() // request.interval = 10000 // request.fastestInterval = 5000 request.numUpdates = 1 request.priority = LocationRequest.PRIORITY_HIGH_ACCURACY val client = LocationServices.getFusedLocationProviderClient(context) val permission = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION ) if (permission == PackageManager.PERMISSION_GRANTED) { client.requestLocationUpdates(request, object : LocationCallback() { override fun onLocationResult(locationResult: LocationResult?) { val location = locationResult?.lastLocation if (location != null) callback.invoke(location) } }, null) } }
und
fun zoomOnMe() { requestMyGpsLocation(this) { location -> mMap?.animateCamera(CameraUpdateFactory.newLatLngZoom( LatLng(location.latitude,location.longitude ), 13F )) } }
quelle