2013-08-25 2 views
62

Я пытаюсь запутаться с Maps API V2, чтобы узнать об этом, и я пытаюсь запустить карту с центром в текущем местоположении пользователя. Используя оператор map.setMyLocationEnabled(true);, я могу показать свое текущее местоположение на карте. Это также добавляет кнопку в пользовательский интерфейс, который центрирует карту в моем текущем местоположении.API Google Maps API V2 Увеличить до текущего местоположения

Я хочу, чтобы эта кнопка нажала в моем коде. Я знаком с классами LocationManager и LocationListener и понимаю, что использование их является жизнеспособной альтернативой, но функциональность для центра и увеличения масштаба в местоположении пользователя, похоже, уже встроена через кнопку.

Если у API есть способ показать текущее местоположение пользователя, то, вероятно, должен быть более простой способ сосредоточиться на местоположении, чем использовать классы LocationManager/LocationListener, не так ли?

+0

Основная задача здесь - получить геокоординаты текущего местоположения. Вы можете использовать библиотеку GPS, чтобы получить это. Когда у вас есть геокоординаты, это тривиально. Для получения дополнительной информации см. Следующее: https://stackoverflow.com/questions/17519198/how-to-get-the-current-location-latitude-and-longitude-in-android/17519248#17519248 – user846316

ответ

12
youmap.animateCamera(CameraUpdateFactory.newLatLngZoom(currentlocation, 16)); 

16 является уровень масштабирования

+1

Но как мне получить currentLocation без использования LocationManager и LocationListener? Или это невозможно? – user139260

+0

невозможно по моим знаниям. , и я предлагаю вам не использовать диспетчер местоположений. пользовательский клиент с высоким уровнем аккумулирования и низким потреблением энергии аккумулятора и простой в реализации. Http: //developer.android.com/google/play-services/location.html, недавно запущенный google –

+1

Местоположение location = map.getMyLocation (); map - объект GoogleMap – Venkat

39

После instansiated объект карты (от фрагмента) добавить это -

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

если вам нужны какие-либо указания только спросить, но это должно быть само explantory - просто введите объект myLocation для значения по умолчанию ...

+1

У меня такая же проблема, но когда я пытаюсь использовать map.getMyLocation(), он предупреждает меня, что этот метод устарел. Каким будет правильный способ сделать это сейчас? – Pam

+13

"getMyLocation() Этот метод устарел. Вместо этого используйте LocationClient.LocationClient обеспечивает улучшенное определение местоположения и использование энергии и используется синей точкой «Мое местоположение». См. «MyLocationDemoActivity» в папке с примерами приложений, например, пример кода или Руководство разработчика для размещения. »(Взято с сайта разработчика Android) В следующий раз просто прочитайте API, если что-то устарело, есть замена для него – crazyPixel

+5

LocationClient был то вы должны использовать LocationServices вместо –

93

Попробуйте следующее кодирование:

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

Что делать, если местоположение == null..Пожалуйста, помогите – jyomin

+0

@jyomin Проверьте здесь мой ответ о том, как получить местоположение пользователя. Он использует вышеуказанный метод с небольшим отказом, чтобы проверить следующее наилучшее возможное местоположение пользователя. http://stackoverflow.com/a/14511032/845038 Это может помочь получить нуль, проверив следующее лучшее место. – DMCApps

+0

Это решение простое и просто работает. Спасибо. – Enkk

1

Это работает текущее местоположение с зумом для Google Map V2

double lat= location.getLatitude(); 
double lng = location.getLongitude(); 
LatLng ll = new LatLng(lat, lng); 
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(ll, 20)); 
+3

'location' выкидывает ошибку:' Невозможно разрешить символ 'location'' – beckah

+0

Вопрос: как получить текущие координаты местоположения и answer is here: http://stackoverflow.com/a/17519248/846316 – user846316

3
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 

+0

Пожалуйста, добавьте некоторое объяснение того, что делает ваш код и как он отвечает на вопрос, и, пожалуйста, отформатируйте его правильно. Преобразуйте вкладки в пробелы перед копированием кода в SO, потому что вкладки часто не отображаются как ожидалось. –

+0

Вышеупомянутое решение загружает фрагмент карты и показывает центральное положение текущего местоположения пользователей с использованием желаемого уровня масштабирования, в этом случае шах был (14.6) @AdiInbar – imm3000

+0

Пожалуйста, включите объяснения в ответ, а не ответьте в комментариях, и отформатируйте код. (FYI, я не спрашивал из личного интереса. Я столкнулся с вашим ответом в очереди проверки низкого качества сообщений и советовал вам улучшить его, чтобы избежать дальнейших downvotes и удалить голоса.) –

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

     } 
    }); 
+1

К сожалению, этот метод теперь устарел :( – Antonio

5

попробовать этот код:

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

Добро пожаловать в Stack Overflow! Хотя этот фрагмент кода может ответить на вопрос, лучше включить описание проблемы, и как ваш код справится с данной проблемой. В будущем, вот некоторая информация, как взломать потрясающий ответ на переполнение стека: http://stackoverflow.com/help/how-to-answer – dirtydanee

Смежные вопросы