Определить, если я приблизился к отметке на картах Android

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

Я искал Geofence API, но я не понимаю, как этот API работает и как реализовать этот код для моего использования.

Мой класс MainActivity:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

private GoogleMap mMap;
private LocationManager locationManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

}

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;

    // Add a marker in Sydney and move the camera
    LatLng latlon = new LatLng(-22.9274767,-47.0775973);
    mMap.addMarker(new MarkerOptions().position(latlon).title("Title").snippet("subtitle"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(latlon));

    mMap.setMyLocationEnabled(true);
    // Check if we were successful in obtaining the map.
    if (mMap != null) {


        mMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {

            @Override
            public void onMyLocationChange(Location arg0) {
                // TODO Auto-generated method stub
                CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(arg0.getLatitude(), arg0.getLongitude()), 18);
                mMap.animateCamera(cameraUpdate);
                //mMap.addMarker(new MarkerOptions().position(new LatLng(arg0.getLatitude(), arg0.getLongitude())).title("It's Me!"));
            }
        });

    }
}

1 ответ

Вы можете использовать ваши LocationListener и LocationManager.requestLocationUpdates, чтобы получить ваше текущее местоположение. Затем вы должны рассчитать расстояние между маркером и вашим местоположением.

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

final static double earthRadius = 6371000; // the average earth radius
public static double distance (double Lat1,double Lng1,double Lat2,double Lng2)
{
    double latRadius = earthRadius*Math.cos(Math.toRadians(Lat1));

    double dLat = Math.abs(Lat1-Lat2),
            dLon=Math.abs(Lng1-Lng2);

    if(dLat>180) dLat-=360;
    if(dLon>180) dLon-=360;

    double dy = earthRadius *Math.toRadians(dLat),
            dx = latRadius *Math.toRadians(dLon);

    double d= Math.sqrt(dy*dy+dx*dx);

    return d;
}
Другие вопросы по тегам