Google Maps v2-установить мое местоположение и увеличить
мой вопрос, кто-нибудь знает, как настроить google maps, чтобы открыть как мое местоположение, так и в увеличенном виде?
В настоящее время основной вид открывается на Африку, полностью уменьшенную.
и поэтому я искал уже несколько дней, и все, что я могу найти, это:
1) Вы не можете анимировать две вещи (например, увеличить и перейти к моему местоположению) в одной карте google? Поэтому, если я могу выяснить, как установить масштаб, прежде чем устанавливать анимацию, тогда эта проблема будет разрешенный. Это, как правило, проблема, вы можете изменить один, но не оба.
2) я нашел другие классы, которые могут быть полезны, но нет никакой помощи о том, как настроить код, чтобы класс мог манипулировать картой google.
Это код, который я держал до сих пор, некоторые работы, некоторые нет. Некоторые из них, как я думал, могут пригодиться позже.
package com.MYWEBSITE.www;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
public class MainActivity extends FragmentActivity {
private GoogleMap map;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
map.setMyLocationEnabled(true);
//LocationSource a = (LocationSource) getSystemService(Context.LOCATION_SERVICE);
//LocationManager b = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
//map.setLocationSource(a);
Criteria criteria = new Criteria();
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
String provider = locationManager.getBestProvider(criteria, false);
Location location = locationManager.getLastKnownLocation(provider);
double lat = location.getLatitude();
double lng = location.getLongitude();
LatLng coordinate = new LatLng(lat, lng);
//CameraPosition.Builder x = CameraPosition.builder();
//x.target(coordinate);
//x.zoom(13);
//Projection proj = map.getProjection();
//Point focus = proj.toScreenLocation(coordinate);
//map.animateCamera(CameraUpdateFactory.newLatLng(coordinate));
map.animateCamera(CameraUpdateFactory.zoomBy(13));
//map.moveCamera(CameraUpdateFactory.newLatLng(coordinate));
////LatLngBounds bounds = mMap.getProjection().getVisibleRegion().latLngBounds;
}
}
11 ответов:
вы не можете анимировать две вещи (например, увеличить и перейти к моему местоположению) в одной карте google?
С точки зрения кодирования, вы бы делали их последовательно:
CameraUpdate center= CameraUpdateFactory.newLatLng(new LatLng(40.76793169992044, -73.98180484771729)); CameraUpdate zoom=CameraUpdateFactory.zoomTo(15); map.moveCamera(center); map.animateCamera(zoom);здесь я сначала перемещаю камеру, а затем анимирую камеру, хотя оба могут быть
animateCamera()звонки. БудьGoogleMapобъединяет их в одно событие, я не могу сказать, как это происходит слишком быстро. : -)вот пример проекта, из которого я вытащил приведенный выше код.
извините, этот ответ ошибочен. Смотрите Роб для того, чтобы действительно сделать это в один выстрел, создав
CameraPositionа затем создатьCameraUpdateот этогоCameraPosition.
можно изменить местоположение, масштабирование, подшипник и наклон все за один раз. Также можно установить длительность на
animateCamera()звонок.CameraPosition cameraPosition = new CameraPosition.Builder() .target(MOUNTAIN_VIEW) // Sets the center of the map to Mountain View .zoom(17) // Sets the zoom .bearing(90) // Sets the orientation of the camera to east .tilt(30) // Sets the tilt of the camera to 30 degrees .build(); // Creates a CameraPosition from the builder map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));взгляните на документы здесь:
https://developers.google.com/maps/documentation/android/views?hl=en-US#moving_the_camera
Это простое решение для вашего вопроса
LatLng coordinate = new LatLng(lat, lng); CameraUpdate yourLocation = CameraUpdateFactory.newLatLngZoom(coordinate, 5); map.animateCamera(yourLocation);
попробуйте таким образом -
public class SummaryMapActivity extends FragmentActivity implements LocationListener{ private GoogleMap mMap; private LocationManager locationManager; private static final long MIN_TIME = 400; private static final float MIN_DISTANCE = 1000; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.summary_mapview); if (mMap == null) { // Try to obtain the map from the SupportMapFragment. mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) .getMap(); // Check if we were successful in obtaining the map. if (mMap != null) { mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker")); } } mMap.setMyLocationEnabled(true); locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME, MIN_DISTANCE, this); } @Override public void onLocationChanged(Location location) { LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLng, 15); mMap.animateCamera(cameraUpdate); locationManager.removeUpdates(this); } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub }}
вы также можете установить оба параметра, как,
mMap.moveCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(21.000000, -101.400000) ,4) );это определяет местоположение вашей карты на определенном месте и масштабирование. Я использую это при настройке моей карты.
его поздний ответ, но я думаю, что это поможет. Используйте этот метод:
protected void zoomMapInitial(LatLng finalPlace, LatLng currenLoc) { try { int padding = 200; // Space (in px) between bounding box edges and view edges (applied to all four sides of the bounding box) LatLngBounds.Builder bc = new LatLngBounds.Builder(); bc.include(finalPlace); bc.include(currenLoc); googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bc.build(), padding)); } catch (Exception e) { e.printStackTrace(); } }используйте этот метод после загрузки карты. Ура!
самый простой способ сделать это-использовать CancelableCallback. Вы должны проверить, что первое действие завершено, а затем вызвать второе:
mMap.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, size.x, height, 0), new CancelableCallback() { @Override public void onFinish() { CameraUpdate cu_scroll = CameraUpdateFactory.scrollBy(0, 500); mMap.animateCamera(cu_scroll); } @Override public void onCancel() { } });
1.Добавьте xml-код в макет для отображения карт.
2.Включите Google maps api, а затем получите ключ api, который находится ниже.
<fragment android:id="@+id/map" android:name="com.google.android.gms.maps.MapFragment" android:layout_width="match_parent" android:value="ADD-API-KEY" android:layout_height="250dp" tools:layout="@layout/newmaplayout" /> <ImageView android:id="@+id/transparent_image" android:layout_width="match_parent" android:layout_height="match_parent" android:src="@color/transparent" />3.Добавьте этот код в onCreate.
MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(UpadateProfile.this);4.Добавьте этот код после oncreate. затем доступ к текущему местоположению с помощью маркера помещенный в это
@Override public void onMapReady(GoogleMap rmap) { DO WHATEVER YOU WANT WITH GOOGLEMAP map = rmap; setUpMap(); } public void setUpMap() { map.setMapType(GoogleMap.MAP_TYPE_HYBRID); map.setMyLocationEnabled(true); map.setTrafficEnabled(true); map.setIndoorEnabled(true); map.getCameraPosition(); map.setBuildingsEnabled(true); map.getUiSettings().setZoomControlsEnabled(true); markerOptions = new MarkerOptions(); markerOptions.title("Outlet Location"); map.setOnMapClickListener(new GoogleMap.OnMapClickListener() { @Override public void onMapClick(LatLng point) { map.clear(); markerOptions.position(point); map.animateCamera(CameraUpdateFactory.newLatLng(point)); map.addMarker(markerOptions); String all_vals = String.valueOf(point); String[] separated = all_vals.split(":"); String latlng[] = separated[1].split(","); MyLat = Double.parseDouble(latlng[0].trim().substring(1)); MyLong = Double.parseDouble(latlng[1].substring(0,latlng[1].length()-1)); markerOptions.title("Outlet Location"); getLocation(MyLat,MyLong); } }); } public void getLocation(double lat, double lng) { Geocoder geocoder = new Geocoder(UpadateProfile.this, Locale.getDefault()); try { List<Address> addresses = geocoder.getFromLocation(lat, lng, 1); } catch (IOException e) { TODO Auto-generated catch block e.printStackTrace(); Toast.makeText(this,e.getMessage(),Toast.LENGTH_SHORT).show(); } } @Override public void onLocationChanged(Location location) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { }
ответ @ CommonsWare на самом деле не работает. Я обнаружил, что это работает правильно :
map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(-33.88,151.21), 15));
вы не можете анимировать две вещи (например, увеличить и перейти к моему местоположению) на одной карте google.
Поэтому используйте перемещение и анимацию камеры для увеличенияgoogleMapVar.moveCamera(CameraUpdateFactory.newLatLng(LocLtdLgdVar)); googleMapVar.animateCamera(CameraUpdateFactory.zoomTo(10));
gmap.animateCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(9.491327, 76.571404), 10, 30, 0)));
Comments