2014-02-28 54 views
1

我正在使用谷歌地圖,並希望能夠檢測用戶是否在標記的半徑(放置在地圖上),使用用戶當前位置。我有用戶當前的位置座標(經度和緯度)和標記的座標,但不知道如何計算用戶是否在該區域。下面的圖片可能最能描述我想要做什麼。Android谷歌地圖如何檢查用戶是否在標記圈地區

enter image description here

我有一個這樣的算法:

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(); 

回答

7

地圖我用這個:

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 
} 
+0

迷人,工作就像一個魅力! – Khateeb321

+0

有人可以標記爲已回答嗎? – Khateeb321

0

你爲什麼不使用接近警報?

這是你可以做什麼:不是畫圈,放置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";

希望這有助於