Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.82
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
#1

Центровка по текущей локации в GoogleMap - Программирование Android

09.05.2013, 16:45. Просмотров 3007. Ответов 33
Метки нет (Все метки)

А скажите, вот у меня есть код:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.map);
                
        FragmentManager myFragmentManager = getSupportFragmentManager();
           SupportMapFragment mySupportMapFragment 
            = (SupportMapFragment)myFragmentManager.findFragmentById(R.id.map);
           myMap = mySupportMapFragment.getMap();
           
           myMap.setMyLocationEnabled(true);
    }
загружается карта (map api v2) и показывается синя точка где я нахожусь при нажатии кнопки (на карте значек есть, он появляется при написании этой строчки кода: myMap.setMyLocationEnabled(true) я смещаюсь (центрируюсь) на то место где нахожусь.
А как сделать, чтоб камера сразу центрировалась туда где я нахожусь.??? (нужно чтобы работало на Api 8)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2013, 16:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Центровка по текущей локации в GoogleMap (Программирование Android):

Проверка на достижение локации на карте - Программирование Android
Хотелось бы динамически получать координаты и выводить их в виде тоста. @Override protected void onCreate(Bundle...

Перемещение маркера на GoogleMap - Программирование Android
Подскажите пожалуйста в чём может быть дело.. я сделал locationListener, в OnLocationChanged я меняю координаты маркера и пишу их в лог......

Маркер по центру MapView googleMap - Программирование Android
В некоторых приложениях есть возможность на карте указать свое местоположение. там реализовано так: 1) в центре карты расположен не...

GoogleMap, getMap() выдает ошибку - Программирование Android
вызываю из главного окна новое активити кнопкой вот так: Intent intent = new Intent(MainActivity.this, MapViewActivity.class); ...

Добавление картинки на карту GoogleMap - Программирование Android
Добрый день. Абсолютный новичок в программировании, посему хотел бы совета. По долгу службы работника связи, есть задача сделать...

Android studio шаблон GoogleMap Activity - Программирование Android
Создал шаблон гугл карт. В value есть файл google_maps_api.xml(debug)// <resources> <string...

33
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
10.05.2013, 22:16 #2
А как вы находите локацию?
0
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
10.05.2013, 22:53  [ТС] #3
Вот весь код:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
 
import com.google.android.gms.maps.CameraUpdate;
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;
 
public class MapActivity extends FragmentActivity implements LocationListener {
    
    private GoogleMap myMap;
    private LocationManager locationManager;
    private String provider;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.mapLayout);
 
        // location
        FragmentManager myFragmentManager = getSupportFragmentManager();
        SupportMapFragment mySupportMapFragment = (SupportMapFragment) myFragmentManager
                .findFragmentById(R.id.map);
        myMap = mySupportMapFragment.getMap();
 
        myMap.setMyLocationEnabled(true);
 
        LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
        boolean enabledGPS = service
                .isProviderEnabled(LocationManager.GPS_PROVIDER);
    
        if (!enabledGPS) {
            Toast.makeText(this, "Нет сигнала GPS", Toast.LENGTH_LONG).show();
            
        }
        
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
 
        Criteria criteria = new Criteria();
        provider = locationManager.getBestProvider(criteria, false);
        Location location = locationManager.getLastKnownLocation(provider);
 
        // Initialize the location fields
        if (location != null) {
            Toast.makeText(this, "Selected Provider " + provider,
             Toast.LENGTH_SHORT).show();
            onLocationChanged(location);
        } else {
            // do something
        }
 
    }
 
    /* Request updates at startup */
    @Override
    protected void onResume() {
        super.onResume();
        locationManager.requestLocationUpdates(provider, 400, 1, this);
    }
 
    /* Remove the locationlistener updates when Activity is paused */
    @Override
    protected void onPause() {
        super.onPause();
        locationManager.removeUpdates(this);
    }
 
    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub
 
        double lat = location.getLatitude();
        double lng = location.getLongitude();
         Toast.makeText(this, "Location " + lat+","+lng,
         Toast.LENGTH_LONG).show();
        LatLng coordinate = new LatLng(lat, lng);
         Toast.makeText(this, "Location " +
         coordinate.latitude+","+coordinate.longitude,
         Toast.LENGTH_LONG).show();
 
        // добавил, вот как я понимаю это и центрирует и приближает
        myMap.animateCamera(CameraUpdateFactory.newLatLng(coordinate));
        CameraUpdate center = CameraUpdateFactory
                .newLatLng(new LatLng(lat, lng));
        CameraUpdate zoom = CameraUpdateFactory.zoomTo(15);
        myMap.moveCamera(center);
        myMap.animateCamera(zoom);
    }
 
    @Override
    public void onProviderDisabled(String provider) {
        Toast.makeText(this, "Enabled new provider " + provider,
         Toast.LENGTH_SHORT).show();
    }
 
    @Override
    public void onProviderEnabled(String provider) {
         Toast.makeText(this, "Disabled provider " + provider,
         Toast.LENGTH_SHORT).show();
    }
 
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub
 
    }
 
}
На версии 2.3.4 (api 10) не центрирует, а планшете версия 4.2.2 (api 17) работает центрирование и приближение. Что же сделать????
0
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
10.05.2013, 23:50 #4
Я сейчас тоже стою перед такой проблемой. Если я вас правильно понял, то вы хотите, чтоб при запуске ката передвинулась на синюю точку? Если да, то мне кажется что сразу не центрирует потому что есть вот это
Location location = locationManager.getLastKnownLocation(provider);
То есть берет ранее известную локацию и двигает на неё карту. У вас провайдер GPS, ему нужно время чтобы поймать 3+ спутников. Я так понимаю, что при запуске он не успевает взять локацию и берет старую. Вот туда и двигает

Добавлено через 1 минуту
Цитата Сообщение от Stylish2013 Посмотреть сообщение
а планшете версия 4.2.2 (api 17) работает центрирование и приближение
Вы имеете в виду при запуске карта не становиться в центр локации или нельзя даже элементами управления приближать?
0
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
10.05.2013, 23:54  [ТС] #5
Да он берёт старую локацию туда двигает карту, хотя меня синей точкой определяет в другом месте, если нажать кнопку автоматического центрирования я смещаюсь туда куда нужно и если я передвигаюсь, то и на карте я показываюсь стрелочкой и естественно она тоже движется, но карта стоит на месте и если самому её не пододвигать, то не будет видно стрелки. Спутники сразу не определяются, но потом когда они определяются хорошо, все-равно не работает, а вот на nexus, планшете версия 4.2.2 (api 17) работает центрирование и приближение, всё как надо!
0
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
10.05.2013, 23:59 #6
Цитата Сообщение от Stylish2013 Посмотреть сообщение
но карта стоит на месте и если самому её не пододвигать, то не будет видно стрелки
Так вы хотите сделать чтоб когда стрелочка подходила к границам экрана, то перемещалась в центр? Как на картах версии 1 ?
0
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
11.05.2013, 00:22  [ТС] #7
Я хочу чтобы я всегда был в центре. Как только запускаю карту и когда начинаю передвигаться. Пусть с опозданием, но центрировало меня и приближало.
0
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
11.05.2013, 00:24 #8
Вот код, который по идее должен передвигать карту если синяя точка подходит к краю
Java
1
2
3
4
5
6
           LatLngBounds bounds = this.mMap.getProjection().getVisibleRegion().latLngBounds;
 
        if(!bounds.contains(new LatLng(location.getLatitude(), location.getLongitude())))
        {
             mMap.animateCamera(CameraUpdateFactory.newLatLng(new LatLng(location.getLatitude(), location.getLongitude())));
        }
Я его не пробовал. Может вам пригодиться
0
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
11.05.2013, 00:26  [ТС] #9
У меня этот код центрирует и приближает на nexus карту:

Javascript
1
2
3
4
5
6
 myMap.animateCamera(CameraUpdateFactory.newLatLng(coordinate));
        CameraUpdate center = CameraUpdateFactory
                .newLatLng(new LatLng(lat, lng));
        CameraUpdate zoom = CameraUpdateFactory.zoomTo(15);
        myMap.moveCamera(center);
        myMap.animateCamera(zoom);
0
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
11.05.2013, 00:29 #10
А чем отличается myMap.animateCamera от myMap.moveCamera ?
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
11.05.2013, 00:44 #11
вероятно, animateCamera перемещает плавно, а moveCamera перемещает мгновенно.
0
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
11.05.2013, 00:46 #12
Так там получается и то, и другое
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
11.05.2013, 00:48 #13
там перемещает к координатам мгновенно, а зум применяет плавно.
0
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
11.05.2013, 01:00 #14
А как можно взять координаты синей точки на карте? Которая показывает мою позицию
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
11.05.2013, 01:06 #15
Java
1
2
3
4
5
6
7
8
9
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(  
LocationManager.GPS_PROVIDER, 5000, 10, new LocationListener (){
             @Override
             public void onLocationChanged(Location loc) {
                               CameraUpdate center = CameraUpdateFactory.newLatLng(new LatLng(loc.getLatitude(), loc.getLongitude()));
                               myMap.moveCamera(center);  
             }
});
0
11.05.2013, 01:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2013, 01:06
Привет! Вот еще темы с ответами:

Описание маркера в развернутом виде, GoogleMap API - Программирование Android
Всем привет! Есть вопрос, связанный с картами googleMap. Как программно сделать так, чтобы описание маркеров на карте всегда были в...

GoogleMap. Восстановление карты после смены ориентации экрана - Программирование Android
GoogleMap V2. Через onSaveInstanceState / onRestoreInstanceState восстанавливаю тип карты, маркеры и положение камеры. Но может есть...

Создание локации - XNA
Хочу создать изометрическую 2.5d игру (не знаю насколько корректно так её называть): карта 2d, персонажи 3d. Чтобы реализовать...

Получить x, y локации пикчербокса - Visual Basic .NET
Всем привет! У меня есть пикчер бокс с координатами 10,20 Как мне в переменную x занести 10, а в y 20?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru