Android Google Map, как проверить, находится ли пользователь в области маркерного круга

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

введите здесь описание изображения

У меня такой алгоритм:

map.OnInfoWindowClickListener(new OnInfoWindowClickListener()){
    public void isUserInArea(Marker marker){

        float[] distance = new float[2];
           //users current location 
        Location.distanceBetween(currentLocation.getLatitude(),currentLocatiocation.getLongitude(),
        marker.getPosition().latitude, marker.getPosition().longitude, distance);
}

Который не находит, находится ли текущее местоположение в пределах области маркера, потому что я не могу достать круг маркеров. Однако это самое близкое, что у меня есть. Был бы признателен за помощь.

Чтобы помочь, я добавляю круг на карту вот так

// adding circle to map
circleOptions = new CircleOptions();
circleOptions.center(new LatLng(locationlist.get(i)
        .getLatitude(), locationlist.get(i).getLongitude()));
circleOptions.radius(20);
circleOptions.strokeColor(Color.BLUE);
circleOptions.fillColor(Color.BLUE);
map.addCircle(circleOptions);

//check that all tasks are in circle radius

Marker locationMarker = map.addMarker(markerOp);
locationMarker.showInfoWindow();

person user2219097    schedule 28.02.2014    source источник


Ответы (3)


Я использую это:

Location.distanceBetween(mMarker.getPosition().latitude,
            mMarker.getPosition().longitude, mCircle.getCenter().latitude,
            mCircle.getCenter().longitude, distance);

if (distance[0] > mCircle.getRadius()) {
      //Do what you need

}else if (distance[0] < mCircle.getRadius()) {
//Do what you need
}
person Natalie Carr    schedule 04.03.2014

Почему вы не используете оповещения о приближении?

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

map.addMarker(new MarkerOptions()
    .title(name)
    .icon(BitmapDescriptorFactory.fromResource(R.drawable.gpsmap))
    .position(coordinates)
    .flat(true)
    .rotation(90));

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

// Proximity alert
private void addProximityAlert(double lat, double lng, int id){
    Intent intent = new Intent(PROX_ALERT_INTENT);
    PendingIntent proximityIntent = PendingIntent.getBroadcast(this, id, intent, Intent.FLAG_ACTIVITY_NEW_TASK);
    locationManager.addProximityAlert(lat, lng, POINT_RADIUS, EXPIRATION, proximityIntent);
}

где EXPIRATION = -1 (чтобы предупреждение о приближении не истекло) и POINT_RADIUS принимают значения радиуса вашего предыдущего круга.

Затем вам нужно добавить на карту прослушиватель оповещений о приближении:

IntentFilter filter = new IntentFilter(PROX_ALERT_INTENT);
registerReceiver(new ProximityIntentReceiver(), filter);

где PROX_ALERT_INTENT = "yourProjectPackageName.ProximityActivity";

Надеюсь это поможет

person alvaro.delaserna    schedule 10.04.2014

Этот учебник может помочь вашему требованию. Близость входа и выхода пользователя предупреждение

всего наилучшего.

person Rameshbabu    schedule 13.04.2015