Карты Google (V2) в приложении для Android

Только что познакомился с API Карт Google (v2) и интегрировал его в свое приложение для Android, и у меня есть 2 вопроса, которые я не нашел, как лучше всего это сделать:

Во-первых, это всегда фокус на текущем местоположении пользователя (например, в приложении GPS). Что я сделал, так это в onCreate я получаю местоположение пользователя (согласно некоторым вещам, которые я нашел здесь и там))

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.map);

        MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);

        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        String bestProvider = locationManager.getBestProvider(criteria, true);
        Location location = locationManager.getLastKnownLocation(bestProvider);
        LatLng currentUserPosition = new LatLng(location.getLatitude(), location.getLongitude());
        // setting the cam position to current position
        CameraPosition camPosition = new CameraPosition(currentUserPosition, 17f, 30f, 0f);
        CameraUpdate update = CameraUpdateFactory.newCameraPosition(camPosition);
        mapFragment.getMap().animateCamera(update);

        // updating map every second
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                1000, // 1-second interval.
                10, // 10 meters.
                listener);
}

Где listener — это LocationListener, настроенный следующим образом:

private final LocationListener listener = new LocationListener() {

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onLocationChanged(Location location) {
        CameraPosition camPosition = new CameraPosition(new LatLng(location.getLatitude(), location.getLongitude()), 17f, 30f, 0f);
        MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
        CameraUpdate update = CameraUpdateFactory.newCameraPosition(camPosition);
        mapFragment.getMap().animateCamera(update);
    }
};

Это правильный способ сделать это?
Во-вторых, пользователь может касаться карты и динамически добавлять маркеры на карту (со своими названиями и прочим). Я пытался найти (но не нашел) способ нарисовать путь между маркерами и действовать как приложение GPS. Это вообще возможно?
Спасибо.


person Mr T.    schedule 06.04.2013    source источник


Ответы (2)


Я настоятельно рекомендую следовать руководству разработчика из документации, чтобы правильно интегрировать Сопоставляет Android API v2 с вашим приложением, а также проверяет пример кода. в комплекте с SDK сервисов Google Play.

Лучший (и самый простой) способ автоматически отслеживать местоположение пользователя (точка «Мое местоположение») — реализовать OnMyLocationChangeListener и соответствующим образом обновить камеру в обратном вызове, предоставляемом этим интерфейсом.

Для создания серии отрезков, соединяющих маркеры, вы должны иметь возможность использовать класс Polyline. Изменить: этот связанный ответ может оказаться полезным для рисования пути между двумя маркерами.

person Nevermore    schedule 17.04.2013

На самом деле в Google Map API V2 вы можете использовать:

map.setMyLocationEnabled(true);

это создаст значок в окне карты Google, чтобы отслеживать текущее местоположение пользователя. На самом деле я думаю, что это проще, чем реализовать весь LocationListener.

о вопросе о маркерах вам нужно будет реализовать какое-то окно, в котором пользователь может установить все данные маркера. а затем вы можете добавить маркер динамически следующим образом:

marker = map.addMarker(new MarkerOptions().position(latlng).title(markersTitleArray[i]).icon(BitmapDescriptorFactory.fromResource(R.drawable.marker)));

если вы хотите добавить этот маркер при щелчке по карте, вам нужно будет реализовать:

map.setOnMapClickListener(this);
map.setOnMapLongClickListener(this);

в вашем Activity.

Наконец, о вашем последнем вопросе, поскольку вам уже был предоставлен мой ответ о том, как нарисовать Polyline на карте для направления:

Нарисуйте маршрут между двумя точками GeoPoints на GoogleMap SupportMapFragment< /а>

person Emil Adz    schedule 21.04.2013