Android Google Maps API V2缩放至当前位置
我正在尝试使用Maps API V2来熟悉它,并且试图以用户的当前位置为中心来启动地图。 使用map.setMyLocationEnabled(true);
声明,我可以在地图上显示我的当前位置。 这也将button添加到我的当前位置的中心地图的用户界面。
我想模拟那个button在我的代码。 我熟悉LocationManager
和LocationListener
类,并意识到使用这些是一个可行的select,但是在用户位置居中和放大的function似乎已经通过button构build。
如果API有一个方法来显示用户的当前位置,那么肯定有一个更容易的方法来居中位置比使用LocationManager
/ LocationListener
类,对吗?
试试这个编码:
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)); }
在你启动地图对象之后(从片段)添加这个 –
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)); }
如果你需要任何指导,只要问,但它应该是自我解释 – 只是instassiate myLocation对象的默认值…
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); } });
youmap.animateCamera(CameraUpdateFactory.newLatLngZoom(currentlocation, 16));
16是缩放级别
试试这个代码:
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"/>
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
这是与谷歌地图V2缩放工作的当前位置
double lat= location.getLatitude(); double lng = location.getLongitude(); LatLng ll = new LatLng(lat, lng); googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(ll, 20));
重点在于获取当前位置的地理坐标。 你可以使用GPS库来获取。 一旦你有地理坐标,它的微不足道的。 请参考以下详细信息: 如何在android中获取当前位置的纬度和经度