Определить, если я приблизился к отметке на картах 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;
}