首页 文章

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

提问于
浏览
64

我'm trying to mess around with the Maps API V2 to get more familiar with it, and I' m试图以用户当前位置为中心启动 Map . 使用 map.setMyLocationEnabled(true); 语句,我可以在 Map 上显示我当前的位置 . 这也会将按钮添加到UI中,该按钮将 Map 置于当前位置的中心 .

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

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

8 回答

  • 41
    youmap.animateCamera(CameraUpdateFactory.newLatLngZoom(currentlocation, 16));
    

    16是缩放级别

  • 101

    这是工作当前位置与谷歌 Map V2的缩放

    double lat= location.getLatitude();
     double lng = location.getLongitude();
     LatLng ll = new LatLng(lat, lng);
     googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(ll, 20));
    
  • 1
    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
    

  • 14

    试试这段代码:

    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);
        }
    }
    

    }

    别忘了在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

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

    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));
    }
    

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

  • 3

    试试这个编码:

    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));       
    }
    
  • 13

    以下是如何在Kotlin中的 ViewModelFusedLocationProviderClient 中执行此操作

    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))
                }
            }
    
  • 7
    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);
    
            }
        });
    

相关问题