Android Google Maps API V2缩放到当前位置

use*_*260 71 android location google-maps google-maps-android-api-2

我正在尝试使用Maps API V2来熟悉它,我正在尝试以用户当前位置为中心启动地图.使用该map.setMyLocationEnabled(true);语句,我可以在地图上显示我当前的位置.这也会将按钮添加到UI中,该按钮将地图置于当前位置的中心.

我想在我的代码中模拟按下按钮.我熟悉LocationManagerLocationListener类,并意识到使用它们是一个可行的替代方案,但是中心和放大用户位置的功能似乎已经通过按钮内置.

如果API有一个方法来显示用户的当前位置,那么肯定必须有一个更容易的方法来定位该位置而不是使用LocationManager/ LocationListenerclasses,对吧?

小智 106

试试这个编码:

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));       
}
Run Code Online (Sandbox Code Playgroud)


cra*_*xel 43

在您实例化地图对象(从片段)后添加此 -

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));
}
Run Code Online (Sandbox Code Playgroud)

如果你需要任何指导只是问但它应该是自我解释 - 只需将m​​yLocation对象默认为默认对象...

  • "getMyLocation()此方法已弃用.使用LocationClient代替.LocationClient提供改进的位置的发现和功率使用,并用于通过'我的位置’的蓝点.见例如实施例的代码的示例应用程序文件夹中的MyLocationDemoActivity或地点开发指南." (取自android开发者网站)下次只是读取API,如果某些内容已被弃用,则可以替换它 (15认同)
  • LocationClient已标记为已过时.您必须使用LocationServices (5认同)

SHA*_*NDA 16

youmap.animateCamera(CameraUpdateFactory.newLatLngZoom(currentlocation, 16));
Run Code Online (Sandbox Code Playgroud)

16是缩放级别


mz8*_*z87 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);

        }
    });
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,此方法现在已被弃用:( (2认同)

小智 9

试试这段代码:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

}

别忘了在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"/>
Run Code Online (Sandbox Code Playgroud)


onm*_*133 5

以下是如何在 Kotlin 中执行此ViewModel操作FusedLocationProviderClient

locationClient.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))
            }
        }
Run Code Online (Sandbox Code Playgroud)