Как перемещаться по карте (Android Maps API v2)

Я почти заставил свои карты работать в моем приложении. У меня проблемы. когда это место появится на картах. Я хочу иметь возможность щелкнуть по месту и открыть его в соответствующем приложении Google Maps. так что при необходимости вы можете перейти к месту.

Итак, у меня есть карта с местом на маркере. Я хочу нажать на маркер, а затем получить адрес на картах Google. это сделано для того, чтобы люди, которым нужно перемещаться, могли просто щелкнуть по нему, а затем проложить маршрут.

Java-код выглядит так:

public class showroommap extends Activity {
static final LatLng HAMBURG = new LatLng(53.558, 9.927);
static final LatLng KIEL = new LatLng(52.633011,-1.132913);
private GoogleMap map;



 @Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
setContentView(R.layout.showroommap);
map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
    .getMap();
Marker hamburg = map.addMarker(new MarkerOptions().position(HAMBURG)
    .title("Hamburg"));
Marker kiel = map.addMarker(new MarkerOptions()
    .position(KIEL)
    .title("Kiel")
    .snippet("Kiel is cool")
    .icon(BitmapDescriptorFactory
        .fromResource(R.drawable.ic_launcher)));

//Move the camera instantly to hamburg with a zoom of 15.
map.moveCamera(CameraUpdateFactory.newLatLngZoom(HAMBURG, 15));

//Zoom in, animating the camera.
map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);
 }

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
 }

} 

Это возможно?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: я хочу щелкнуть маркер, который отображается в моем приложении. после нажатия на маркер он перейдет на Google Maps и направит к нему по мере необходимости.


person x iHarpzZ    schedule 03.09.2013    source источник
comment
вам следует удалить тег javascript, поскольку этот вопрос не имеет отношения к javascript.   -  person Emmanuel    schedule 03.09.2013


Ответы (2)


Если я правильно понимаю, вы хотите отправить намерение в приложение Google Maps с широтой и долготой, чтобы пользователь мог перейти к определенному местоположению. Вот как я реализовал это в своем приложении:

Intent navigation = new Intent(Intent.ACTION_VIEW, Uri.parse("google.navigation:q=" +latlong.latitude+","+latlong.longitude));
        startActivity(navigation);

latlong имеет тип LatLng.

ОБНОВЛЕНИЕ 1 - для прослушивания кликов по маркеру

public class showroommap extends Activity implements onMarkerClickListener {
static final LatLng HAMBURG = new LatLng(53.558, 9.927);
static final LatLng KIEL = new LatLng(52.633011,-1.132913);
private GoogleMap map;



 @Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
setContentView(R.layout.showroommap);
map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
    .getMap();
map.setOnMakerClickListener(this); //Register this Activity to the onMarkerClickListener
Marker hamburg = map.addMarker(new MarkerOptions().position(HAMBURG)
    .title("Hamburg"));
Marker kiel = map.addMarker(new MarkerOptions()
    .position(KIEL)
    .title("Kiel")
    .snippet("Kiel is cool")
    .icon(BitmapDescriptorFactory
        .fromResource(R.drawable.ic_launcher)));

//Move the camera instantly to hamburg with a zoom of 15.
map.moveCamera(CameraUpdateFactory.newLatLngZoom(HAMBURG, 15));

//Zoom in, animating the camera.
map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);
 }

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
 }

@Override
 public boolean onMarkerClick(final Marker marker) {

    if (marker.equals(kiel)) 
    {
        //handle click here
     return true;
    }
    else if (marker.equals(hamburg)) 
    {
        //handle click here
        return true;
    }
    return false;
}

} 
person Emmanuel    schedule 03.09.2013
comment
привет, да, я хочу на самом деле открыть карту в своем приложении. но затем, когда я нажимаю на маркер, я хочу, чтобы он переходил на карты и отображал маршруты - person x iHarpzZ; 03.09.2013
comment
Да, вам нужно установить GoogleMap.setOnMarkerClickListener(); Затем на onMarkerClick (маркер маркера) вы установите и запустите Intent. Вы можете сослаться на конкретный маркер внутри onMarkerClick (маркер маркера), используя оператор if и сопоставив заголовок маркера, который передается методу, с заголовком имени, который вы дали маркеру, или просто проверив, является ли маркер тем же маркером например, используя marker.equals(kiel). - person Emmanuel; 03.09.2013
comment
привет, большое спасибо за ваш ответ ... есть ли где-нибудь пример этого, поскольку я запутался - person x iHarpzZ; 03.09.2013
comment
Вот еще один пост, который я нашел с реализацией stackoverflow.com/questions/14226453/. Я собираюсь отредактировать свой ответ, чтобы немного помочь вам. - person Emmanuel; 03.09.2013
comment
Отметьте этот вопрос как ответ, если он решил вашу проблему. - person Emmanuel; 27.01.2014

здесь, возможно, вы можете использовать что-то вроде этого

public class showroommap extends Activity implements OnMarkerClickListener{
static final LatLng HAMBURG = new LatLng(53.558, 9.927);
static final LatLng KIEL = new LatLng(52.633011,-1.132913);
private GoogleMap map;



 @Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
setContentView(R.layout.showroommap);
map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
    .getMap();
Marker hamburg = map.addMarker(new MarkerOptions().position(HAMBURG)
    .title("Hamburg"));
Marker kiel = map.addMarker(new MarkerOptions()
    .position(KIEL)
    .title("Kiel")
    .snippet("Kiel is cool")
    .icon(BitmapDescriptorFactory
        .fromResource(R.drawable.ic_launcher)));
map.setOnMarkerClickListener(this); 
//Move the camera instantly to hamburg with a zoom of 15.
map.moveCamera(CameraUpdateFactory.newLatLngZoom(HAMBURG, 15));

//Zoom in, animating the camera.
map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);
 }

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
 }

} 

 @Override
public boolean onMarkerClick(Marker arg0) {
final Context mContext = this;
final LatLng now = arg0.getPosition();
AlertDialog.Builder course = new AlertDialog.Builder(mContext);
    course.setNegativeButton("On Foot", new OnClickListener(){


        @Override
        public void onClick(DialogInterface arg0, int arg1) {
            // TODO Auto-generated method stub
            Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(String.format("google.navigation:ll=%s,%s%s", now.latitude, now.longitude, "&mode=w")));
            mContext.startActivity(i);
        } 

    });

    course.setNeutralButton("By Car", new OnClickListener(){

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
            Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(String.format("google.navigation:ll=%s,%s%s",  now.latitude, now.longitude, "&mode=d")));
            mContext.startActivity(i);
        }

    });
    course.setPositiveButton("On Bike", new OnClickListener(){

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
            Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(String.format("google.navigation:ll=%s,%s%s",  now.latitude, now.longitude, "&mode=b")));
            mContext.startActivity(i);
        }

    });
course.show();
return false;
}
person JRowan    schedule 03.09.2013
comment
Он хочет иметь возможность нажать на Маркер, и Маркер запустит приложение Google Maps... - person Emmanuel; 03.09.2013
comment
не карты google, а google navigator, и это просто диалоговое окно с предупреждением, чтобы поместить щелчок маркера, я думаю о том, чтобы снять его, он сказал, что это не то, что вам нужно - person JRowan; 03.09.2013
comment
ну вот, я отредактировал ваш вопрос для рабочего примера в моем ответе - person JRowan; 03.09.2013
comment
Ошибка public boolean onMarkerClick(Marker arg0) { говорит, что это должно быть логическое значение. если я изменяю его на логическое, он говорит, что он должен быть недействительным. так что это кружит - person x iHarpzZ; 03.09.2013
comment
Или он говорит добавить оператор возврата - person x iHarpzZ; 03.09.2013
comment
Метод должен возвращать логическое значение. - person Emmanuel; 03.09.2013
comment
извините, я просто вставил взамен false - person JRowan; 03.09.2013
comment
Я думаю, что если вы вернете false, слушатель выполнит свое обычное поведение, а именно анимацию маркера и отображение информации. Я думаю, что возврат true должен работать, если он не работает с false. - person Emmanuel; 03.09.2013
comment
Боже мой. большое спасибо, ребята. спасибо за ваш вклад, это работает отлично. также еще одна вещь. что, если я просто хочу, чтобы автомобиль удалял только другие 2. а также есть ли способ зайти в карты, а не в навигацию? еще раз спасибо - person x iHarpzZ; 03.09.2013
comment
я не мог помочь вам с картами, и кнопки просто удалить два других - person JRowan; 03.09.2013
comment
Спасибо, в любом случае. это должно быть что-то с "google.navigation:ll=%s,%s%s" вместо навигации, это, наверное, карты, я попробую разобраться. еще раз спасибо - person x iHarpzZ; 03.09.2013