2015-11-10 11 views
1

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

Я искал 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!")); 
      } 
     }); 

    } 
} 
+0

Играть с этим материалом [получить уведомление, когда Расположение Изменения] (https://sites.google.com/site/androidhowto/how- к-1/получить-уведомление, когда-местоположение-изменений). Надеюсь, вы найдете то, что хотите. – activesince93

+0

Должно быть легко (с учетом координат обеих точек) рассчитать расстояние между ними в Km. В чем проблема? – Nanoc

+0

Я не вижу в вашем коде какой-либо из geofencing api, вы попробовали примеры, показанные здесь: http://developer.android.com/training/location/geofencing.html? –

ответ

0

Вы можете использовать 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; 
}