Находясь на расстоянии 50 метров от маркера, включите метод - PullRequest
0 голосов
/ 17 марта 2012

Что мне нужно сделать, так это когда маркер «пользователя» попадает (скажем, в радиус 50 метров) в радиус одного из маркеров интересующего объекта и открывает диалоговое окно (showplaceDialog ()).

Как мне это сделать?Я просто понятия не имею, как это сделать ...

Вот так я ставлю маркер "пользователь", который перемещается при изменении местоположения.

@Override
public void onLocationChanged(Location location) {
    Log.d("Location", "onLocationChanged with location " + location.toString());

    if(overlayMarkerYou == null) {
        overlayMarkerYou = new MyOverlay(getResources().getDrawable(R.drawable.marker_you),mapView);
        mapView.getOverlays().add(overlayMarkerYou);
    }else{
        mapView.getOverlays().remove(overlayMarkerYou);
        mapView.invalidate();
        overlayMarkerYou = new MyOverlay(getResources().getDrawable(R.drawable.marker_you),mapView);
        mapView.getOverlays().add(overlayMarkerYou);
    }

    if (location != null) {

        mapView.invalidate();
        GeoPoint gpt = new GeoPoint(microdegrees(location.getLatitude()),microdegrees(location.getLongitude()));
        mapController.setCenter(gpt);
        overlayMarkerYou.addPoint(gpt, getString(R.string.markerYou), getString(R.string.markerYouDescription));

    }

}

И вот как япоставить несколько маркеров для достопримечательностей

public void putPlacesOfInterest(){
    this.dh = new DataHelper(ShowMap.this);
    List<Pontos> list = this.dh.selectAll();
    for(Pontos p : list){
        markerPlaces.add(new OverlayItem(p.getName().toString(), Long.toString(p.getId()), new GeoPoint(p.getLat(), p.getLng())));
    }
    mMyLocationOverlay = new ItemizedIconOverlay<OverlayItem>(markerPlaces, new OnItemGestureListener<OverlayItem>() {

        @Override
        public boolean onItemLongPress(int index, OverlayItem item) {
            Toast.makeText(ShowMap.this, "" + item.mTitle, Toast.LENGTH_SHORT).show();
            return true;
        }

        @Override
        public boolean onItemSingleTapUp(int index, OverlayItem item) {
            showplaceDialog(Integer.parseInt(item.mDescription),item.mTitle);
            return true;
        }

    }, mResourceProxy);

    mapView.getOverlays().add(mMyLocationOverlay);
    mapView.invalidate();
}

1 Ответ

1 голос
/ 17 марта 2012

Я бы порекомендовал изучить функцию addProximityAlert () , доступную в классе LocationManager. Я не уверен, сколько слушателей вы можете зарегистрировать.

Ваш другой выбор - проверять каждое обновление местоположения. Когда ваше приложение получает ответный вызов onLocationChanged(), вы можете просмотреть свои достопримечательности и проверить, находятся ли они в пределах 50 метров от текущего местоположения. Чтобы сделать это еще проще, вы можете использовать метод distanceTo() в классе Location.

...